OpenAPI 仕様書からのクライアントコード生成⚓︎
サーバー側で公開される Web API は、 OpenAPI 仕様書を自動生成しています(詳細は ASP.NET Core Web API プロジェクトの構成 を参照)。 Vue.js アプリケーションでは、 OpenAPI Generator を使用して、この OpenAPI 仕様書からクライアントコードを生成します。
事前準備⚓︎
OpenAPI 仕様書の出力設定 に示す手順に従って生成した OpenAPI 仕様書をローカルに保存します。ここでは、ファイル名を「dressca-api.json」とします。
JDK のインストール⚓︎
OpenAPI Generator を使用するためには、 Java 11 以降のランタイムと、システム環境変数 JAVA_HOME の設定が必要です。 Oracle JDK や Eclipse Temurin など、適当な JDK をインストールし、 JAVA_HOME を設定してください。
Axios⚓︎
Axios のインストール⚓︎
1 |
|
OpenAPI Generator⚓︎
OpenAPI Generator のインストール⚓︎
OpenAPI Generator をインストールします。ターミナルで以下のコマンドを入力します。
1 |
|
OpenAPI Generator の設定⚓︎
package.json の scripts セクションにタスクを追加します。
package.json | |
---|---|
1 2 3 4 5 |
|
--clean
オプションを指定することで、クライアントコードを生成する前に、以前の生成ファイルを削除できます。 これにより、 API 仕様書の変更によって不要になったクライアントコードは自動的に削除されます。
ワークスペースの直下に、設定ファイルを作成します。
openapisettings.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
設定ファイルの内容について説明します。
キー | 設定値 | 意味 |
---|---|---|
"inputSpec" | "./../../dressca-backend/src/Dressca.Web.Consumer/dressca-api.json" | 入力の API 仕様書を指定します。 |
"generatorName" | "typescript-axios" | 使用するジェネレーターを指定します。 |
"outputDir" | "./src/generated/api-client" | 生成されたコードの出力先を設定します。 |
"additionalProperties" | - | 使用するジェネレーターごとに固有の値2をキー・バリュー形式で設定します。 |
"withSeparateModelsAndApi" | "true" | model と API を別クラス・別フォルダーに配置します。 |
"modelPackage" | "models" | クラスのパッケージ名を「models」に設定します。 |
"apiPackage" | "api" | API クラスのパッケージ名を「api」に設定します。 |
"supportsES6" | "true" | ES6 に準拠したコードを生成します。 |
クライアントコードの生成⚓︎
ターミナルで以下のコマンドを実行します。
1 |
|
"outputDir"
に定義した出力先へ、クライアントコードが生成されます。
クライアントコードの設定⚓︎
./src/api-client/index.ts
というファイルを作成し、以下のように設定します。
index.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
apiClient.Configuration
: api-client の共通の Configuration があればここに定義します。プロパティの詳細は こちら を参照してください。axios.create
: axios インスタンスを生成し、共通の設定をカスタマイズします。詳しくは 公式ドキュメント を参照してください。
このファイルでは、 api-client や axios 共通の設定をします。
src/generated/api-client/api
に自動生成された API をimport
します。- 上記の例の
DefaultApi
と同様にapiClient.XxxApi(createConfig(), '', axiosInstance)
コンストラクターでインスタンスを生成します。 - 生成したインスタンスを
export
します。
BaseAPI のコンストラクター
BaseAPI(configuration?: Configuration, basePath: string, axios: AxiosInstance)
BaseAPI
は OpenAPI Generator で自動生成されるコードの base.ts
に含まれるクラスです。 各 API が継承している BaseAPI
コンストラクターの引数に api-client の共通設定、ベースパス1、 axios インスタンスを設定することで、 API に関するグローバルな設定を適用します。
OpenAPI Generator で生成されたクライアントコードはデフォルトで OpenAPI 仕様書の URL が設定されます。 開発環境やモックで API サーバーなしでアプリを起動するためには、アプリレベルでエンドポイントを設定する必要があります。 Vite では /api
のような相対パスに対して異なるエンドポイントの設定ができ、これを有効にするためには、 BaseAPI
コンストラクターの第 2 引数のベースパスを空文字で上書きする必要があります。
base.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|