本篇内容主要讲解“go requests的工作过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go requests的工作过程是什么”吧!
最开始尝试用map[string]string或map[string]interface{}接受数据,发现接受之后取复杂对象类型中的数据比较麻烦,就想到了先看接口返回数据的具体格式,构造下结构体去接收;
由于给的接口文档并没有将请求token和请求数据两个接口的正确和错误字段[类型给出],所以改结构体的字段类型多试了几遍、但是请求接口错误信息没法模拟,就根据写python时候的经验加了能记起来的Result参数;
请求接口正确和错误情况下包含的字段完全不同,但是这边都构造在了接受的结构体对象中,不知道这么处理正确么
package hr import ( "gitee.com/RandolphCYG/akita/pkg/log" "github.com/asmcos/requests" ) // HrToken 获取token接口返回数据结构体 type HrToken struct { // 正确时候 AccessToken string `json:"access_token"` ExpiresIn int `json:"expires_in"` Scope string `json:"scope"` TokenType string `json:"token_type"` // 错误时候 Code int `json:"code"` Error string `json:"error"` ErrorDescription string `json:"error_description"` Message string `json:"message"` Success bool `json:"success"` } // HrData HR数据接口返回数据结构体 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"` // 出错时候 Result string `json:"result"` } // HrUser 数据接口查询的用户信息结构体 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数据模型 type HrDataConn struct { // 获取 token 的 URL UrlGetToken string `json:"url_get_token" gorm:"type:varchar(255);not null;comment:获取token的地址"` // 获取 数据 的URL UrlGetData string `json:"url_get_data" gorm:"type:varchar(255);not null;comment:获取数据的地址"` } // FetchToken 获取token func FetchToken(h *HrDataConn) (token HrToken) { req := requests.Requests() respFetchToken, err := req.Post(h.UrlGetToken) if err != nil { // 抛错 log.Log().Error("fetch token failed,err:%v\n", err) return } // 反序列化 err = respFetchToken.Json(&token) if err != nil { // 抛错 log.Log().Error("convert response to json failed,err:%v\n", err) return } if !token.Success { // 抛错 log.Log().Error(token.ErrorDescription) return } return } // FetchHrData 带着token去获取HR数据 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", } // 发送请求 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) // 返回数据是否有报错字段 if hrdata.Result != "" { log.Log().Error("fetch hr data failed,err%v\n", hrdata.Result) return } hrUsers = hrdata.Content return }
到此,相信大家对“go requests的工作过程是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。