タイトルにあるようにSwagger
で作成したいのであれば、yaml
を作成すればいい。
だけど、そんなことをするのは面倒くさい。
というのもNestJs
ではデコレーターを追加するだけで自動でSwagger UI
を作成してくれた。
そこでGo
でも同様な手順で実現できるライブラリを探してみた。
swaggo/swag
swaggo/swagを使えばできそうだったので試してみた。
インストール
go install github.com/swaggo/swag/cmd/swag@latest
アノテーションを作成する
main.go
にアノテーションを追加する。
// @title sample api
// @version 1.0
// @description this is sample apigw
// @host localhost:18080
// @BasePath /api/v1
// @tag.name accounts
// @tag.description about accounts request
func main() {
handlers.HandleRequests()
}
記入後にswag init
を実行する。
.
├── docs.go
├── swagger.json
└── swagger.yaml
すると上記ファイルたちが生成される。
UIで確認する
これがいまいちわかなかったので、https://editor.swagger.io/に生成されたyaml
ファイルをコピペして見る方法にしているけど、localhost:18080/api/v1で見られるんだと思われる。
…見れないので、要調査。
⚠️ 違った。 localhost:18080/api/v1 上のURLはBaseURL
だった。
まあ、問題ないので、いったん上記方法で行く。
追記:2023.12.30 Swagger ViewerVSCodeの拡張機能があった。
個別APIのアノテーションを作成する
// GetAccount
// @summary アカウントの情報を返します
// @description user_idを元にアカウント情報を返します
// @tags accounts
// @produce json
// @success 200
// @failure 401
// @router /accounts [get]
func FetchUserById(w http.ResponseWriter, r *http.Request) {
...
こんな感じで、アノテーションを追加すればいける。
詳細はhttps://github.com/swaggo/swag?tab=readme-ov-file#declarative-comments-formatに詳しい。
大枠はこれくらい。
後は最適化していくだけ。