您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“go requests的工作過程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“go requests的工作過程是什么”吧!
最開始嘗試用map[string]string或map[string]interface{}接受數(shù)據(jù),發(fā)現(xiàn)接受之后取復(fù)雜對象類型中的數(shù)據(jù)比較麻煩,就想到了先看接口返回?cái)?shù)據(jù)的具體格式,構(gòu)造下結(jié)構(gòu)體去接收;
由于給的接口文檔并沒有將請求token和請求數(shù)據(jù)兩個(gè)接口的正確和錯(cuò)誤字段[類型給出],所以改結(jié)構(gòu)體的字段類型多試了幾遍、但是請求接口錯(cuò)誤信息沒法模擬,就根據(jù)寫python時(shí)候的經(jīng)驗(yàn)加了能記起來的Result參數(shù);
請求接口正確和錯(cuò)誤情況下包含的字段完全不同,但是這邊都構(gòu)造在了接受的結(jié)構(gòu)體對象中,不知道這么處理正確么
package hr import ( "gitee.com/RandolphCYG/akita/pkg/log" "github.com/asmcos/requests" ) // HrToken 獲取token接口返回?cái)?shù)據(jù)結(jié)構(gòu)體 type HrToken struct { // 正確時(shí)候 AccessToken string `json:"access_token"` ExpiresIn int `json:"expires_in"` Scope string `json:"scope"` TokenType string `json:"token_type"` // 錯(cuò)誤時(shí)候 Code int `json:"code"` Error string `json:"error"` ErrorDescription string `json:"error_description"` Message string `json:"message"` Success bool `json:"success"` } // HrData HR數(shù)據(jù)接口返回?cái)?shù)據(jù)結(jié)構(gòu)體 type HrData struct { Content []HrUser `json:"content"` Empty bool `json:"empty"` Number int `json:"number"` NumberOfElements int `json:"numberOfElements"` Size int `json:"size"` TotalElements int `json:"totalElements"` TotalPages int `json:"totalPages"` // 出錯(cuò)時(shí)候 Result string `json:"result"` } // HrUser 數(shù)據(jù)接口查詢的用戶信息結(jié)構(gòu)體 type HrUser struct { CompanyCode string `json:"company_code"` CompanyName string `json:"company_name"` Name string `json:"ename"` Department string `json:"org_all"` Eid string `json:"pernr"` Stat string `json:"stat2"` Mobile string `json:"usrid"` Mail string `json:"usrid_long"` Title string `json:"zmplans"` } // HrDataConn HR數(shù)據(jù)模型 type HrDataConn struct { // 獲取 token 的 URL UrlGetToken string `json:"url_get_token" gorm:"type:varchar(255);not null;comment:獲取token的地址"` // 獲取 數(shù)據(jù) 的URL UrlGetData string `json:"url_get_data" gorm:"type:varchar(255);not null;comment:獲取數(shù)據(jù)的地址"` } // FetchToken 獲取token func FetchToken(h *HrDataConn) (token HrToken) { req := requests.Requests() respFetchToken, err := req.Post(h.UrlGetToken) if err != nil { // 拋錯(cuò) log.Log().Error("fetch token failed,err:%v\n", err) return } // 反序列化 err = respFetchToken.Json(&token) if err != nil { // 拋錯(cuò) log.Log().Error("convert response to json failed,err:%v\n", err) return } if !token.Success { // 拋錯(cuò) log.Log().Error(token.ErrorDescription) return } return } // FetchHrData 帶著token去獲取HR數(shù)據(jù) func FetchHrData(h *HrDataConn) (hrUsers []HrUser) { req := requests.Requests() hrToken := FetchToken(h) header := requests.Header{ "Authorization": hrToken.TokenType + " " + hrToken.AccessToken, "Content-Type": "application/json;charset=UTF-8", } // 發(fā)送請求 respFetchData, err := req.Post(h.UrlGetData, header) if err != nil { log.Log().Error("fetch hr data failed,err:%v\n", err) return } var hrdata HrData respFetchData.Json(&hrdata) // 返回?cái)?shù)據(jù)是否有報(bào)錯(cuò)字段 if hrdata.Result != "" { log.Log().Error("fetch hr data failed,err%v\n", hrdata.Result) return } hrUsers = hrdata.Content return }
到此,相信大家對“go requests的工作過程是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。