🚀
Flutterで使うAPI関連のDartコードをOpenApi Generatorで自動生成する
OpenAPI Generator を使ってDartコード(null safety対応)を自動生成のまとめ
Open API Generator とは
OpenAPI Generator とは、OpenAPI Spec を元に、APIクライアントライブラリ(SDK生成)、サーバースタブ、ドキュメント、設定を自動的に生成することができるツールのことです。
簡単に言えばYAML→コードにすることができるInstallation
jarを使う
null safety対応のdartコードを生成するには最低のバージョンは6.0.0
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/6.0.0/openapi-generator-cli-6.0.0.jar -O openapi-generator-cli.jar
API定義のYamlを記述する
example.yaml
paths:
# paths オブジェクト
/users:
# path item オブジェクト
get: # GET
# Operationオブジェクト
tags:
- users
summary: Get all users.
description: Returns an array of User model
parameters: []
responses: # レスポンス定義
'200': # HTTP status
description: A JSON array of User model
content:
application/json: # レスポンスの形式指定
schema:
type: array
items:
$ref: '#/components/schemas/User' # 参照するモデル
example: # サンプルデータ
- id: 1
name: John Doe
- id: 2
name: Jane Doe
post: # POST
tags:
- users
summary: Create a new User
description: Create a new User
parameters: []
requestBody: # リクエストボディ
description: user to create
content:
application/json:
schema: # POSTするオブジェクト
$ref: '#/components/schemas/User'
example:
id: 3
name: Richard Roe
responses:
'201':
description: CREATED
/users/{userId}:
get:
tags:
- users
summary: Get user by ID.
description: Returns a single User model
parameters: # リクエストパラメータ
- name: userId
in: path # パラメータをパス内に含める
description: user id
required: true
schema:
type: integer
responses:
'200':
description: A single User model
content:
application/json:
schema:
type: object
items:
$ref: '#/components/schemas/User'
example:
id: 1
name: John Doe
Yamlの記述についてはSwagger Editorを使えばSyntaxを確認できます
$ java -jar openapi-generator-cli.jar validate -i example.yaml
Validating spec (example.yaml)
No validation issues detected.
YamlからDartのコードを自動生成する
java -jar openapi-generator-cli.jar generate -i example.yaml -g dart -o build
同じフォルダの/build/lib/にDartのコードが生成される
configは-cオプションで指定することができます
テンプレートは-tオプションで指定することができます
java -jar openapi-generator-cli.jar -DbrowserClient=false -DapiTests=false -DmodelTests=false \
generate -i example.yaml -g dart -t template -o build
templateのmustacheファイルをいじってたら、カスタムされたdartコードは生成できる
デフォルトのtemplate構成
classの内容をカスタムしたいなら、native_class.mustacheを編集
Discussion