LoginSignup
0
0

[Go言語]Windows環境におけるOpenAPIによるGoコード自動生成方法 メモ

Posted at

概要

  • 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にブラウザからアクセスする。

    http://localhost:8080/v1/pets

    ※"ListPets method not implemented"と表示される。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0