openapi-generator で生成した Go クライアントで Bearer 認証をする
備忘録。
openapi-generator で生成した Go クライアントで Bearer 使い方について。
以下の YAML を例に考える。Bearer ヘッダにつけて POST /action
にリクエストする。
openapi: "3.0" info: title: "Example API" version: "1.0.0" paths: /foo: post: responses: '200': description: 'API with Bearer' security: # #/components/securitySchemes で定義した scheme を参照 - bearerAuth: [] components: securitySchemes: bearerAuth: type: http scheme: bearer
クライアントを生成する
この YAML を元に生成するために、以下の config.json
を用意する。
{ "packageName": "myapi" }
$ openapi-generator generate -i openapi.yml --git-user-id autopp --git-repo-id "myapi" -g go -o ~/go/src/github.com/autopp/go-myapp
クライアントにリクエストする
生成されたクライアントライブラリの func (*DefaultApi) PostFoo(ctx context.Context)
が POST: /foo
へリクエストするためのメソッドになる。クエリパラメータやリクエストボディはメソッドの引数に渡すが、ヘッダは context.Context
の key/value で渡すのポイント。
package main import ( "context" "github.com/autopp/go-myapp" ) func main() { // クライアントインスタンスを生成 cli := myapp.NewAPIClient() // Bearer トークンをセットした Context を作成 bearer := "xxx" ctx := context.WithValue(context.Background(), myapp.ContextAccessToken, bearer) // POST: /foo にリクエスト res, err := cli.DefaultApi.PostFoo(ctx) // http.Response と error が返ってくる(レスポンスステータスが20xの場合、error は nil) fmt.Println(res) fmt.Println(err) }