OpenAPI & サービスジェネレーター
Core HTTP clientとは別に提供されるオプションのNodeスクリプトです。OpenAPI/Swagger JSONからTypeScriptタイプとserviceファイルを生成する時のみ使用します。
オプション機能: Core使用に必要なし
一般的な@byeolnaerim/typed-rx-http、/nextまたは/rsocketのユーザーはこのスクリプトを実行しなくてもよく、openapi-typescriptをプロジェクトにインストールする必要もありません。
openapi-typescript依存性の隔離
OpenAPIタイプ生成にはopenapi-typescript CLIが必要ですが、パッケージはこれを一般依存関係に入れません。typed-rx-http自体のdevDependencies.typescriptはTypeScript 6.0.3基準を維持し、OpenAPI auto nodeスクリプトでのみ別のnpx一時環境を使用します。
基本OpenAPI生成段階ではopenapi-typescriptと[email protected]を同時に実行するため、ユーザーのプロジェクトにインストールされたTypeScript/openapi-typescriptのバージョンを変更したり使用しません。
必要に応じて全コマンドをopenApiTypescriptCommandに固定できます。
または基本コマンドを構成するpackage versionだけを変更することもできます。
まず: commonServiceFileが指すプロジェクトファイルを準備
generatorの例にcommonServiceFileが登場する前にこのファイルを理解する必要があります。commonServiceFileはファイルを作成するオプションではなく、generated serviceが共通HTTP関数をimportするプロジェクト所有ファイルのパスです。ファイル名はrxjsHttpService.ts、commonService.tsなど自由に決められます。
最小完成形全体コード
以下のファイルはcreateHttpClientをプロジェクトで一度生成し、callApiとcallApiStreamをgenerated serviceが再利用できるようにexportします。キャッシュやセッション認証が必要ない場合はこの構造から始められます。
rxjsHttpService.ts
tsセッション/CSR/SSRキャッシュを含む全体コード
generated serviceがcallApiClientCacheまたはcallApiServerCacheを使用したり、Next.jsでリクエストごとのヘッダーとセッション認証を共通処理するには、次の全体形で拡張します。
rxjsHttpService.ts
ts実行方式
生成されるファイル
基本設定は以下のファイルを生成します。
apiUnionArrays.tsはOpenAPIスキーマenumだけでなく、query、path、header、cookieパラメータenumのreadonly定数配列も生成し、配列queryパラメータのitems.enumも処理します。
オプション: バックエンドSwaggerとプロジェクトcommonService接続
ここからはgeneratorを実際のプロジェクトに接続する例です。WebFlux/webflux-fe-dev-assistantはSwaggerを提供する一つの方法に過ぎず、必須依存性ではありません。
Swagger文書準備
SwaggerはSpringdoc、他のOpenAPIツール、または手動で作成したファイルでも構いません。WebFluxファンクショナルエンドポイントを使用する場合は webflux-fe-dev-assistantでSwagger文書を提供する方法も使用できます。
プロジェクトでオプションを明示して生成する例
バックエンドエンドポイント、保存するswagger.json、タイプ/service出力パスとcommonServiceFileをプロジェクト構造に合わせて明示できます。
generateSwagger.cjs
jsHTTPで文書を受け取れない環境では同じ出力オプションと共に generateSwaggerFromFileを使用できます。
commonServiceFileはimport対象パス
commonServiceFileは生成されたserviceがcallApi、callApiStreamとキャッシュラッパーをimportするプロジェクト所有ファイルのパスです。generatorがこのファイルを生成したり上書きするオプションではありません。
ApiBusinessService.ts
tsプロジェクトで生成結果が配置される例
rxjsHttpService.tsのようにcommonServiceFileで指定した共用ファイルはプロジェクトが直接管理します。autoと@types/autoの下の結果は文書が変更されると再生成されます。
ファイル名と関数名の規則
サービスファイル名はURLの最初の2つのセグメントで、関数名は3つ目以降のセグメントで決まります。path variableはBy + PascalCase形式で関数名に含まれます。
GET /api/business/workplaces/search
ApiBusinessService.ts → workplacesSearch({ params })
GET /api/business/workplaces/{id}
ApiBusinessService.ts → workplacesById({ path })
GET /api/orders/history/search
ApiOrdersService.ts → historySearch({ params })
POST /oauth2/login
Oauth2LoginService.ts → post({ body })
生成関数の呼び出し引数
GeneratedServiceUsage.tsx
tsx生成されたserviceのqueryパラメータkeyはparams、path variableはpath、request bodyはbodyです。生成関数内部でそれぞれqueryString、pathVariable、bodyのServiceArgumentsに変換されます。