温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

go requests的工作过程是什么

发布时间:2021-10-12 13:48:08 来源:亿速云 阅读:101 作者:iii 栏目:编程语言

本篇内容主要讲解“go requests的工作过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go requests的工作过程是什么”吧!

github.com/asmcos/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的工作过程是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI