FS SDK CreateAccessTokenReq 如何传入Http Header参数Content-Type、Authorization

49 阅读1分钟

飞书golang的官方SDK

oapi-sdk-go

需求根据预授权code获取登录用户身份信息

接口文档

当前req请求方式

req := larkauthen.NewCreateAccessTokenReqBuilder().
		Body(larkauthen.NewCreateAccessTokenReqBodyBuilder().
			GrantType(`authorization_code`).
			Code(`xMSldislSkdK`).
			Build()).
		Build()

	// 发起请求
	resp, err := client.Authen.AccessToken.Create(context.Background(), req)

看源码

Create方法可以传一个不定参,类型 larkcore.RequestOptionFunc

而RequestOptionFunc类型为 type RequestOptionFunc func(option *RequestOption)

  • 实际为 一个函数并且入参为 larkcore.RequestOption

image.png

继续查看源码发现

RequestOption 有 Header 字段,类型为 http.Header

有戏

而且有一个WithHeaders函数,省事儿了

func WithHeaders(header http.Header) RequestOptionFunc {
	return func(option *RequestOption) {
		option.Header = header
	}
}

简单了。那就修改代码为

requestOptionFunc := larkcore.WithHeaders(http.Header{
		"Content-Type":  {"application/json; charset=utf-8"},
		"Authorization": {"Bearer " + token},
	})

	// 发起请求
	resp, err := client.Authen.AccessToken.Create(context.Background(), req, requestOptionFunc)
        

这样就可以把http header参数传入 ,并且通过 WithHeaders 返回requestOptionFunc 类型

这样就不用自己构建 RequestOptionFunc,非常方便、简单,且满足了需求。

抛砖引玉而已,笔者目的是 希望大家多看源码,对于不完善SDK、只能自己挖掘自己实现