HTTP APIに対して複数のリクエストを行う必要がある場合、開発者は通常、通常の言語/フレームワークを使用して、コードにアナログ
カールをすばやく記述します:HTTPリクエスト、最小限のエラー制御、クエリまたはjson引数、jsonボディを文字列の形式のフィールド名で解析します。 これはすべて、プロジェクトが成長し始め、数回の呼び出しが数十回にならず、低レベルのコードの一部がコピーアンドペーストを開始するまで、うまく機能します。 それから-コピー&ペーストによって生まれたバグの標準セットであり、開発者が徐々に時間を取り始めます。
Swagger / OpenAPIは、HTTP APIを操作するための「ハーベスター」の1つです。 これはAPI記述言語(最近はジェネレーターと仕様プロジェクトの組み合わせが行われました)、サーバーとクライアントのコードジェネレーター、ドキュメント、テスト-あらゆる種類の便利なものです。 カットの下で、OpenAPI記述をコンパイルし、数行のコードで会社のWebサイトにあるAPIの「人間」の記述を使用してPythonでクライアントを生成する方法を示します。 そして、そのようなクライアントは、手動で記述されたコードよりも優れているでしょう。
テスト対象としてVoximplant HTTP APIを使用する
Voximplant HTTP APIは5年以上前に当社によって作成されたもので、クラウドを完全に管理することができます。通話、ユーザーの操作、番号のレンタルと接続、通話の開始、その他、その他のシナリオを作成します。 開発者向けの管理パネルは、すべてAPIの上に作成されており、HTTPブラウザーリクエストのログを見ると、その使用方法をよく示しています。
たとえば、クラウドにJavaScriptコードをロードするエンドポイント
/ AddScenarioを使用します。 このコードは、着信/発信コールで実行され、これらのコールを管理します(相互接続、音声の認識と合成、録音など)。 ドキュメントでは、HTTP APIは任意の動詞(GET、POSTなど)で使用でき、引数はURLエンコードまたはボディエンコードで渡すことができ、戻り値はドキュメント化されたフィールドを持つJSONであると書きました。 また、ほとんどのAPIは単一の認証スキームを使用します。アカウントID、名前、または電子メールを識別子として使用し、APIキー、パスワード、または一時セッションIDを確認として使用できます。
Swaggerを使用したHTTP APIについて説明します
公式サイトは仕様バージョン3.0で私たちに会っているという事実にもかかわらず、これはトリックです。 これまでのジェネレーターでは2.0しか使用できませんが、これを使用します。 Swaggerは、YAML形式またはJSON形式の説明をサポートしています。YAMLを使用してコードの量を減らします。 API記述の「導入」部分は、仕様のバージョンと、リクエストが行われるルートURLをキャプチャします。
| swagger: "2.0" |
| host: api.voximplant.com |
| basePath: /platform_api |
| schemes: |
| - https |
エンドポイントについて説明します。
| paths: |
| /AddScenario: |
| post: # , POST |
| description: Adds a new scenario |
認可パラメータについて説明します。 自分で説明を作成する場合、可能なオプションから使用するものを説明するだけで十分です。 たとえば、アカウントIDとAPIキーで:
| consumes: |
| - multipart/form-data # body |
| parameters: |
| - name: account_id |
| in: query # url query string |
| type: string |
| description: Account ID for authentication |
| - name: api_key |
| in: formData # body |
| type: string |
| description: Account API key for authentication |
| |
スクリプトの名前とコードを説明します。 サーバーはurlとbodyのパラメーターを等しく処理しますが、URLに12キロバイトまたは2キロバイトのテキストを含むリクエストを送信した場合、ネットワークインフラストラクチャが満足することはほとんどありません。 したがって、
scenario_scriptの場合 、本文を介した転送を厳密に規定します。
| - name: scenario_name |
| in: query |
| type: string |
| maxLength: 30 # swagger |
| description: Scenario name string |
| - name: scenario_script |
| in: formData # - body |
| type: string |
| maxLength: 131072 |
| description: Scenario code string |
最後の仕上げは戻り値です。 すべてのAPIはJSONを返します。
| produces: |
| - application/json |
| responses: |
| 200: |
| description: Success |
| schema: |
| type: object |
| properties: |
| error: |
| type: string |
| description: Error description |
| scenario_id: |
| type: string |
| description: Scenario ID |
swagger-codegenを使用してクライアントを生成する
結果のAPI記述ファイルを使用して、サーバー、ドキュメント、テストの生成など、多くの興味深いことができます。 クライアントを生成します! たとえば、Python-Swaggerは、プログラミング言語とフレームワークの多数の組み合わせをサポートしています。 コードジェネレーターは、jarアーカイブとして
ダウンロードし、プリインストールされたJavaを使用して実行するのが最も簡単です。
| java -jar swagger-codegen-cli-2.2.1.jar generate -i spec.yaml -l python |
チームの結果は、
.md形式のドキュメント、カスタマイズされたテスト、展開、その他の優れた機能を備えた完全に完成したPythonプロジェクトになります。 あなたはすぐに仕事で試すことができます:
| import swagger_client |
| api = swagger_client.DefaultApi() |
| api.add_scenario_post(account_id="1234", api_key="foo-bar-baz", scenario_name="foo", scenario_script="bar") |
クライアントを生成する理由
生成されたクライアントは、まず第一に、エラー制御です。 すべての制限とオブジェクトを使用して(または他の誰かの)HTTP APIを記述した後、生成されたコードは呼び出しと使用法の正当性を検証します。 OpenAPI構文を使用すると、再利用可能なフラグメントを指定できるため、仕様内であっても繰り返し部分がコピーアンドペーストされません。
Swaggerは多くの言語とフレームワークを実行できるため、APIを説明すると、Python、Java、Ruby、PHP、Node.js、Android、iOS用の既製のクライアントが得られます。リストはかなり長く続きます。
HTTP APIの場合 、Swagger記述をJSON形式で生成し
ます 。試してみるのが面白い場合は、
こちらから入手でき
ます 。