概要
- Windows環境においてOpenAPI Generatorを用いたGoコード生成方法についてメモする。
手順
Scoopインストール
Windows用パッケージマネージャーScoop
をインストールする。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
OpenAPI Generatorインストール
OpenAPI Generatorをインストールする。
scoop install openapi-generator-cli
scoop bucket add java
scoop install openjdk
テスト用OpenAPI yaml(petstore.yaml)の取得
- PetstoreのOpenAPI仕様ファイル(
petstore.yaml
)をダウンロードする。
Invoke-WebRequest https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.yaml -OutFile petstore.yaml
コード生成
openapi-generator-cli generate -i petstore.yaml -g go-server -o ./go_openapi
※-i
: API定義ファイルを指定する
※-g
: 生成するコードの言語を指定する
※-o
: 生成されたコードを保存するディレクトリパス
以下のような形でGoコードが自動生成される。
go_openapi
│ petstore.yaml
│
└─go_openapi
│ .openapi-generator-ignore
│ Dockerfile
│ go.mod
│ main.go
│ README.md
│
├─.openapi-generator
│ FILES
│ VERSION
│
├─api
│ openapi.yaml
│
└─go
api.go
api_pets.go
api_pets_service.go
error.go
helpers.go
impl.go
logger.go
model_error.go
model_pet.go
routers.go
コード修正
自身の環境に合わせてコードを修正する。
-
main.go
/* * Swagger Petstore * * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * API version: 1.0.0 * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ package main import ( "log" "net/http" // 変更箇所(上記コマンドと同じディレクトリパスを指定して自動生成した場合は下記のパスとする) // openapi "github.com/GIT_USER_ID/GIT_REPO_ID/go" openapi "go_openapi/go" ) func main() { log.Printf("Server started") PetsAPIService := openapi.NewPetsAPIService() PetsAPIController := openapi.NewPetsAPIController(PetsAPIService) router := openapi.NewRouter(PetsAPIController) log.Fatal(http.ListenAndServe(":8080", router)) }
-
go.mod
// module github.com/GIT_USER_ID/GIT_REPO_ID module go_openapi // go 1.18 go 自身の環境のGoバージョン require github.com/gorilla/mux v1.8.0
-
コード修正内容を適用する
go mod tidy
動作確認
-
APIサーバーを起動する。
go run main.go 2024/02/10 10:12:27 Server started
-
下記URLにブラウザからアクセスする。
※"ListPets method not implemented"と表示される。