溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

go requests的工作過程是什么

發(fā)布時(shí)間:2021-10-12 13:48:08 來源:億速云 閱讀:113 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“go requests的工作過程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“go requests的工作過程是什么”吧!

github.com/asmcos/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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI