APIは、チョコレート、ゴールド、レゴで作られた会社製品の魅力的な画像を作成します。参照実装は、OpenAI(Dall-E、GPT-3)に基づいています。
チョコレートやレゴで作られた驚くほど視覚的に魅力的な会社製品がいくつかあります



Openaiの画像とテキスト生成の機能に触発されたこのAPIは、製品の画像を生成し、企業は最も有名であり、金、チョコレート、LEGO、またはその他の素材に変えます。






生成されたAPIドキュメントに従って、[Postmanで実行]ボタンをクリックします

このサーバーは、OpenAPIジェネレータープロジェクトを使用して生成されました。 コードジェネレーターとその生成されたコードを使用すると、API契約がプロジェクトのアンカーと定義者であり、コードとビジネスロジックが条件を完了して遵守することを目的としています。 API契約。
nodejs> = 10.6
npm> = 6.10.0
コードはMacに記述されているため、すべてがLinuxベースのコンピューターでスムーズに動作するはずだと仮定します。ただし、このライブラリをWindowsベースのマシンで実行しない理由はありません。 OS関連の問題が見つかった場合は、問題を開いてください。解決されます。
Openapiジェネレーターを使用してアプリケーションを生成します。Java(1.8+)があり、アプリケーションを生成するためにJARを持っていると仮定して、 java -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed} if瓶を持っていないか、ローカルマシンからJavaを実行したくない場合は、OpenApitoolsページの指示に従ってください。スクリプトをオンライン、Docker、その他のさまざまな方法で実行できます。
定義した生成されたディレクトリに移動します。完全に機能しているnodejs-expressjsサーバーがあなたを待っています。これは重要です - コードはあなたのものです。 config.jsを見て、そこにある設定があなたと大丈夫であることを確認します - サーバーはポート3000で実行され、ファイルは新しいディレクトリ「uploaded_files」にアップロードされます。
サーバーは、 /api/openapi.yamlの下にあるOpenapi.yamlファイルに基づいています。これは、アプリの生成に使用したファイルとはまったく同じではありません。I。PATHオブジェクト内で定義されたapplication/jsonコンテンツボディがある場合、生成はOpenAPIドキュメントのコンポーネント/スキーマセクションに移動します。 ii。すべてのプロセスには、新しい要素が追加されていますx-eov-operation-handler: controllers/PetControllerがそのファイルに通話を指示します。 iii。 OperationIDをメソッドに変換するJavaアプリケーションと、そのメソッドを呼び出すのと同じプロセスを実行するNodeJSスクリプトがあります。どちらもこの方法をcamelCaseに変換していますが、矛盾がある可能性があります。 OperationIDの名前に注意して、それらがcontrollersとservicesディレクトリに代表されていることを確認してください。
アプリケーションの構造を理解するために時間をかけてください。バグがあるかもしれませんし、あなたの期待を満たさない設定とビジネスロジックがあるかもしれません。このソリューションを捨てて何か他のものを探している代わりに、生成されたコードを機能させることができるかどうかを確認してください。説明を短くするため(より詳細な説明が続きます):アプリケーションはindex.jsへの呼び出しから始まります(これは後でDBをプラグインする場所です)。 Express.jsとOpenapi-ValidatorがキックインするExpressServer.jsを呼び出します。これは重要なファイルです。それを学んでください。 Openapi.yamlドキュメントで構成されたエンドポイントへのすべての呼び出しはcontrollers/{name_of_tag_which_the_operation_was_associated_with}.jsに送信されます。これは非常に小さな方法です。すべてのビジネスロジックは、 controllers/Controller.jsにあり、そこからservices/{name_of_tag_which_the_operation_was_associated_with}.jsあります。
何が起こるかを理解したら、アプリを起動し、すべてが期待どおりに機能していることを確認してください。
npm start
(config.jsに変更が加えられなかったと仮定)
APIドキュメント、および使用可能なエンドポイントを確認するには:http:// localhost:3000/api-docs/。に
Openapi.yamlドキュメント:http:// localhost:3000/openapiをダウンロードします。
Openapiドキュメントで定義されたエンドポイントへのすべての呼び出しは、リクエストで送信されたすべてのパラメーターとオブジェクトの200とリストを返します。
セキュリティを必要とするエンドポイントは、成功した応答を返す前にセキュリティハンドラーを構成する必要があります。この時点で、彼らは401の応答コードを返します。
ルートディレクトリに(package.json、config.js、およびログファイル以外):
logger.js-プロジェクトのロガーを定義する場所。このプロジェクトはウィンストンを使用していますが、このファイルの目的は、ユーザーが独自のロガー動作を変更および変更できるようにすることです。
index.js-これはプロジェクトの「メイン」ファイルであり、ここからアプリケーションを起動します。これは非常に短く簡潔なファイルであり、この短いファイルから起動する背後にあるアイデアは、残りのコードに影響を与えることなく、異なるパラメーター(Configおよび/またはLoggerの変更)でサーバーを起動するユースケースを許可することです。
ExpressServer.js -Express.jsサーバーのコア。これは、Express Serverが初期化され、Openapi Validator、Openapi UI、およびサーバーを起動するために必要な他のライブラリとともに初期化されています。外部リンクを追加したい場合は、そこに行きます。私たちのプロジェクトは、ルーティングプロセスの最初のステップとして機能するExpress-Openapi-Validatorライブラリを使用します - openapi.yamlファイルで定義されたパスに向けられた要求は、このプロセスによってキャッチされ、パラメーターとボディコンテンツはスキーマに対して検証されます。この検証の成功した結果は、リクエストに追加された新しい「Openapi」オブジェクトです。要求されたパスがOpenapi.yamlファイルの一部ではない場合、Validatorはリクエストを無視し、Express Serverのフローを下に渡します。
Openapi.yaml-これは、このサーバーが準拠するOpenapi契約です。ファイルはコードゲンを使用して生成され、APIゲートウェイを実行するために必要なすべてを含める必要があります - 外部モデル/スキーマへの参照はありません。
現在、単一のファイル:
OpenApiRouter.js-これは、バックエンドコードへのルーティングが発生する場所です。リクエストオブジェクトにopenapiオブジェクトが含まれている場合、次の値( openapi.yamlファイルの一部)を選択します:「x-openapi-router-controller」、および「x-openapi-router-service」。これらの変数は、それぞれコントローラーとサービスディレクトリのファイル/クラスの名前です。リクエストの操作も抽出されます。 OperationIDは、コントローラーのメソッドであり、コードゲンプロセスの一部として生成されたサービスです。ルーティングプロセスは、リクエストと応答オブジェクトをコントローラーに送信します。これにより、リクエストから予想される変数が抽出され、サービスによって処理されるように送信され、サービスから発信者への応答が返されます。
リクエストを検証し、これがAPIゲートウェイに属することを確認した後、リクエストをcontrollerに送信します。ここでは、変数とパラメーターがリクエストから抽出され、処理のために関連するserviceに送信されます。 controller 、 serviceからの応答を処理し、適切なHTTP応答を構築してユーザーに送り返します。
index.js-このプロジェクトのために生成されたすべてのコントローラーをロードし、それらをエクスポートして、 openapiRouter.jsによって動的に使用されます。コントローラーをカスタマイズしたい場合は、こちらのコントローラーにリンクし、CodeGenがこのファイルを書き換えないようにすることをお勧めします。
Controller.js-生成されたコントローラーのコアプロセッサ。生成されたコントローラーは、必要な変数とリクエストから引数を解析するビジネスロジックと、送信されるHTTP応答を構築するためのビジネスロジックについて、 Controller.jsを参照するように設計されています。 Controller.jsは、静的な方法を持つクラスです。
.js-自動生成コード、すべての操作を処理します。コントローラーは、リクエストを送信するサービスクラスで構築されたクラスです。 openapi.yamlによって定義されたすべての要求にはOperationIDがあります。 OperationIDは、呼び出されるメソッドの名前です。すべてのメソッドがリクエストと応答を受信し、 Controller.jsを呼び出して要求と応答を処理し、実際のビジネスロジック処理に呼び出されるサービス方法を追加します。
これは、APIゲートウェイの終了であり、アプリケーションのユニークなビジネスロジックが始まります。Openapi.yamlのすべてのエンドポイントには、変数「X- openapi.yaml -Router-Service」があります。生成。エンドポイントの操作は、呼び出されるメソッドの名前です。生成されたコードは、Try/Catch句で簡単な約束を提供します。操作の成功は、汎用Service.jsへの呼び出しで終了し、成功した応答(ペイロードと応答コード)を作成し、障害は汎用Service.jsを呼び出して、エラーオブジェクトと関連する応答コードを使用して応答を作成します。サービスを1回自動的に生成し、最初のビルド後に手動でメソッドを追加することをお勧めします。
index.js-このプロジェクトのために生成されたすべてのサービスをロードし、 openapiRouter.jsによって動的に使用するようにエクスポートします。サービスをカスタマイズしたい場合は、こちらのコントローラーにリンクし、CodeGenがこのファイルを書き換えないようにすることをお勧めします。
service.js-この時点で非常にシンプルで薄く、サービス操作で成功した結果と失敗した結果のために応答オブジェクトを構築するための2つの静的な方法を備えたユーティリティクラス。デフォルトの応答コードは、成功のために200、失敗の場合は500です。関連する場合は、より正確な応答コードを送信し、これらのデフォルトをオーバーライドすることをお勧めします。
.js-自動生成コードopenapi.yamlで定義されている各操作の約束を提供します。各メソッドは、 openapi.yamlファイルで定義された変数を受信し、Try/Catch句で約束をラップします。約束は、 Service.jsユーティリティクラスへの呼びかけで成功と失敗の両方を解決し、コントローラーに送り返される適切な応答を構築し、次にこのエンドポイントの発信者に送り返します。
serverts.js-基本的なサーバー検証テスト、サーバーがアップしていることを確認し、 openapi.yamlファイルの範囲内のエンドポイントへの呼び出しが200を返し、その範囲外のパスへの呼び出しが存在する場合は200を返すことを確認します。 404そうでない場合。
routingTests.js- openapi.yamlで定義されているすべてのエンドポイントを実行し、サーバーに送信するダミーリクエストを作成します。応答コードが200であることを確認します。この時点で、XMLまたはformData failを含む要求 - 現在、それらはルーターでサポートされていません。
AddationalEndPointStests.js- OpenAPI.YAMLスコープの外側で定義されているすべてのエンドポイントのテストファイル。これらのエンドポイントが成功した200の応答を返すことを確認します。
将来のテストは、送信されたすべてのリクエストの応答が、 openapi.yamlで定義されている構造に適合するようにするために作成する必要があります。このテストは最初に100%失敗し、開発チームの仕事はこれらのテストをクリアすることです。
現在、フィードバックを待っている概念。アイデアは、Openapi.yamlでオブジェクトを定義することで、異なるモジュール間に渡されるモデルとして機能します。これにより、プログラマーは、定義されたJSONオブジェクトではなく、定義されたオブジェクトを使用して相互作用するように適合します。独自のブートストラップパラメーターを使用したいJavaScriptプログラマーの性質を考えると、この概念は機能しない可能性があります。将来の議論とフィードバックのためにこれをここに保ちます。