apidog toka

    1  Apidogを使い回す
     2  本文では、
     3  Apidogを利用し始めようとするユーザーに対して、
     4  コア機能を紹介します。
     5 
     6  30分間ほどの所要時間が必要です。
     7 
     8 
     9  Apidogが選ばれた理由
    10  開発チームがAPIの設計、
    11  管理、
    12  テストのために、
    13  Postman、
    14  Swagger、
    15  Stoplight、
    16  Jmeterなどのさまざまなツールを使用していることが多いことを観察しました。
    17  ただし、
    18  これらのツール間でのデータ同期とコラボレーションがないので、
    19  効率が大幅に下がる可能性があります。
    20 
    21 
    22  開発チーム全体が単一のAPIツール内ですべての作業をやり遂げるのは、
    23  より良い解決策だろうと思っています。
    24  APIドキュメントが定義されている限り、
    25  バックエンド開発者はAPIを簡単に実装して自己テストを行い、
    26  フロントエンド開発者はAPIを簡単に呼び出してMockデータを使用し、
    27  テストエンジニアはAPIを直接テストしてテストケースを簡単に生成できたら、
    28  チーム協同作業の効率が大幅に向上できるのでしょう。
    29 
    30 
    31  これこそ、
    32  私たちはApidogを始めたきっかけです。
    33  Apidogは、
    34  チームの協同作業のために設計されていて、
    35  APIの設計、
    36  開発、
    37  テスト、
    38  管理、
    39  ドキュメント生成やMockなどのことが実現され、
    40  今までにない包括的なAPIツールです。
    41 
    42 
    43  Apidogとは
    44  Apidogは、
    45  API開発のためのオールインワンツールキットです。
    46  チーム全体が協力して、
    47  APIをより効率的かつ便利に作成するために開発されているものです。
    48  チームの各メンバーは、
    49  それを使って自分の問題解決を図ることができます。
    50 
    51 
    52  apidog
    53 
    54  Apidogは、
    55  APIの設計と開発をユーザーインターフェイスより優先する開発アプローチ(いわゆるAPIファーストアプローチ)を採用しています。
    56  このアプローチには、
    57  次のようないくつかのメリットがあります。
    58 
    59 
    60  Apidogを使用すると、
    61  チームの各メンバーは同時に作業を進んでサービス間で合意を達成することで、
    62  複数のAPIで同時に作業し、
    63  開発速度を大幅に向上させることができます。
    64 
    65  自動化は、
    66  APIの定義ファイルのインポートツールを通して実現され、
    67  APIの開発と実行に必要な時間を短縮できます。
    68 
    69  直感的なデザインと十分に文書化されたAPIドキュメントにより、
    70  開発者の優れたエクスペリエンスが保証されます。
    71  また、
    72  開発者が簡単にコードを使用・再利用し、
    73  新しい開発者をオンボードし、
    74  学習コストを減らすこともできます。
    75 
    76  コードが書かれる前にも、
    77  ほとんどの問題を解決することができるので、
    78  APIをアプリケーションに統合する際に問題を発生することを防ぐこともできます。
    79 
    80  API設計者:APIの作成
    81  API設計者はApidogを使用して、
    82  APIを視覚的に作成するか、
    83  OpenAPIの仕様からインポートします。
    84 
    85 
    86  OpenAPIの仕様からインポート
    87  APIがOpenAPIまたはその他の形式で指定されている場合は、
    88  Apidogにインポートすると、
    89  簡単にデバッグ
    90  テスト、
    91  またはMockすることができます。
    92 
    93 
    94  Apidogのプロジェクトで インポートをクリックします。
    95 
    96  Import
    97 
    98  URLのインポートを選択して、
    99  次のURLを貼り付けて、
   100   提出をクリックします。
   101 
   102  https://petstore.swagger.io/v2/swagger.json
   103  apidog
   104 
   105  JSONYAMLファイルからのインポートも可能ですが、
   106  Apidog、
   107  HARなど、
   108  他のAPI仕様の形式もサポートされています。
   109 
   110 
   111  確認をクリックしてインポートします。
   112 
   113  apidog
   114 
   115  ここでApidogを使用してAPIを実行するか、
   116  テストすることができます。
   117 
   118  apidog
   119 
   120  ヒント
   121 
   122  データのインポートの詳細を ここで見る。
   123 
   124 
   125  新しいAPIを作成
   126  API設計者は非常に直感的なインターフェース内でAPIを作成できます。
   127 
   128 
   129  新しいタブで 新しいAPI をクリックしてエンドポイントを作成します。
   130 
   131  apidog
   132 
   133  次に、
   134  IDでユーザー情報を照会するためのAPIを指定します。
   135  そのため、
   136  次のフィールドをAPIに入力できます。
   137 
   138  APIパス:
   139  /users/{id}
   140  名前:
   141  IDでユーザー情報を取得
   142  apidog
   143 
   144  このAPIには、
   145  QueryパラメータとBodyパラメータがありません。
   146  ここで「Id」がPathパラメータとして認識されると、
   147  「Request」の部分が完成しました。
   148 
   149  Response 部分に移動して、
   150  「OK (200)」でルートノードのフィールドタイプを「参照モデル → Schemas → ApiResponse」に変更します。
   151 
   152  apidog
   153 
   154  ここでAPIは、
   155  次のような一般のJSON構造を生成しました。
   156  全てのAPIも異なる「data」フィールドがあるため、
   157  ルートノードに「data」と名付けられた子ノードを追加します。
   158 
   159  apidog
   160 
   161  「data」ノードのフィールドタイプを「参照モデル → Schemas → User」に変更します。
   162 
   163  apidog
   164 
   165  ここでResponseをうまく設定できました。
   166  「data」構造内のデータを編集する場合は、
   167  スキーマ参照を解除するか、
   168  編集したいフィールドの参照を解除する必要があります。
   169 
   170  apidog
   171 
   172  ヒント
   173 
   174  データSchemaの詳細を ここで見る。
   175 
   176 
   177  Responseの例の部分に移動して、
   178   例を追加をクリックします。
   179 
   180  apidog
   181 
   182  例の名称を「Success」に設定します。
   183  ここで 自動生成をクリックして、
   184  戻りデータがResponse構造に基づいて生成されます。
   185   OK をクリックして例を追加します。
   186 
   187  apidog
   188 
   189  保存をクリックして、
   190  APIの作成が完了しました。
   191  ここでうまく設計されたAPIが手に入れましたよ。
   192 
   193  apidog
   194 
   195  バックエンド開発者:APIの開発とデバッグ
   196  異なるチームは異なる開発アプローチを採用しています。
   197  APIファーストを採用しているチームもありますし、
   198  コードファーストを採用しているのもあります。
   199  ただし、
   200  チームがどの方法を採用していても、
   201  バックエンド開発者はApidogを使用してAPIの開発とデバッグを簡単に実現できます。
   202 
   203 
   204  コードの生成
   205  APIが指定された場合、
   206   スタブサーバーとクライアントSDKが簡単に生成されます。
   207  APIページで コード生成 ボタンから すべてのコードを生成をクリックするだけです。
   208 
   209  apidog
   210 
   211  OpenAPI Generatorエンジンを利用して、
   212  スタブサーバーとクライアントSDKを数十個の言語で生成できます。
   213 
   214  apidog
   215 
   216  ヒント
   217 
   218  コード生成の詳細を ここで見る。
   219 
   220 
   221  APIを実行
   222  APIの開発が完了すると、
   223  多くの場合ではバックエンドの開発者は、
   224  APIが異なるパラメータで正確な結果を返すかをデバッグする必要があります。
   225  Apidogを使用すると、
   226  各APIデバッグし、
   227  正常に実行できることを簡単に確認できます。
   228 
   229 
   230  先に作成したAPIのページで、
   231   実行ボタンをクリックして 実行 タブに移動します。
   232 
   233  apidog
   234 
   235  「id」パラメータのパラメータ値で「1」を入力します。
   236  ここで送信待ちのrequest URLの中の {id} は、
   237  「1」に置き換えられます。
   238 
   239  apidog
   240 
   241  画面の右上角の 環境の管理ボタンをクリックします。
   242 
   243  apidog
   244 
   245  「テスト環境」に切り替えて、
   246  次のURLを「Default Sever」サービスに貼り付けます。
   247  その後、
   248  環境を保存します。
   249 
   250  https://mock.apidog.com/m1/352945-0-default
   251  ヒント
   252 
   253  環境管理の詳細を ここで見る。
   254 
   255 
   256  apidog
   257 
   258  そして、
   259  「Testing Env」を選択すると、
   260  先に設定したBase URLは、
   261  送信待ちのすべてのrequestsの先頭に追加されます。
   262 
   263  apidog
   264 
   265  送信をクリックしてRequestを送信します。
   266  APIのResponseは下の部分で表示されます。
   267 
   268  apidog
   269 
   270  デバッグ
   271  APIの開発が環境を設定した後、
   272   バックエンド開発者は、
   273  期待のデータを返しているか、
   274  APIが正しいロジックを実装しているかをテストする必要があります。
   275 
   276 
   277  pathパラメータの値を「2」に設定して、
   278   Requestを 送信します。
   279 
   280  apidog
   281 
   282  「.data.id should be integer」という警告が表示されます。
   283  なぜかというと、
   284  .data.idshouldbeinteger」という警告が表示されます。
   285  なぜかというと、
   286  .data.idはintegerである必要がありますが、
   287  実際に返された$.data.idはStringになっているからです。
   288 
   289  apidog
   290 
   291  Apidogは、
   292  APIの定義と実際のResponseが一貫しているかどうかを自動的に検証します。
   293  正しくないデータタイプ、
   294  定義されていない列挙値、
   295  必須フィールドの欠落などの問題は自動的に検出されます。
   296  バックエンド開発者は、
   297  戻りデータの問題を簡単に検出できます。
   298 
   299  APICaseを保存ボタンをクリックしてRequestを保存します。
   300   当該RequestはAPIの子ディレクトリに保存され、
   301  テストモジュールに参照されることができます。
   302 
   303  apidog
   304 
   305  apidog
   306 
   307  変数の利用
   308  Apidogでは、
   309  変数がRequest間で再利用可能な値を格納するために利用されています。
   310 
   311 
   312  環境変数は環境に繋がっています。
   313  つまり、
   314  特定の環境が選択された場合にのみアクセス可能です。
   315  一方、
   316  グローバル変数は、
   317  すべての環境でアクセスできます。
   318 
   319 
   320  Apidogの「環境の管理」セクションで環境変数を定義し、
   321  {{variableName}}のように二重波括弧を使用して、
   322  Requestで環境変数を参照できます。
   323 
   324 
   325  例:
   326 
   327  pathパラメータ「id」の値に{{Userid}}を入力します。
   328 
   329  apidog
   330 
   331  環境管理をクリックします。
   332   Useridと名付けられた変数を新しく追加し、
   333   ローカル値に「1」を記入して、
   334  変数を保存します。
   335 
   336  apidog
   337 
   338  Requestを送信します。
   339   Response - 実際のRequestの順にrequest URLを確認できます。
   340  ここで {{Userid}} は ローカル値に置き換えられたことを確認できます。
   341 
   342  apidog
   343 
   344  ヒント
   345 
   346  変数の詳細を ここを見る。
   347 
   348 
   349  前処理
   350  Apidogでは、
   351  前処理はRequestを送信する前に実行される操作です。
   352  これにより、
   353  Requestが送信される前にRequestと環境変数を操作できます。
   354 
   355 
   356  前処理の利用シーン:
   357 
   358  Requestで利用されている変数の設定と編集
   359  データ検証、
   360  またはデータ変換の実行
   361  Headerの追加と編集
   362  ログ情報とデータのデバッグ
   363  他のReuqestを行い、
   364  そのResponseデータを変数への保存
   365  Request URLの編集
   366  これらの操作はJavaScriptに書き込まれ、
   367  Postman SDKでRequest、
   368  Responseオブジェクト、
   369  環境変数
   370  及びグローバル変数にアクセスできます。
   371  Scriptが追加されると、
   372  Requestが送信されるたびに実行されます。
   373 
   374 
   375  前処理のRequestパラメータ値を変更する例:
   376 
   377  前処理タブをクリックし、
   378   前処理を追加 ボタンをクリックして カスタムScriptを追加します。
   379 
   380  apidog
   381 
   382  次のScriptを カスタムScriptエリアに貼り付けます。
   383 
   384  let Userid = parseInt(pm.environment.get("Userid"));
   385  Userid = Userid + 1;
   386  console.log(Userid);
   387  pm.environment.set("Userid", Userid);
   388  apidog
   389 
   390  カスタムScript を 変数置換&親を継承にドラッグして、
   391  Requestを送信します。
   392 
   393  apidog
   394 
   395  送信した後、
   396   {{Userid}}の値が2になったことを確認できます。
   397  そして、
   398  Requestを複数回送信する場合、
   399  送信する度に、
   400   {{Userid}} の値に1をプラスするようになります。
   401 
   402  apidog
   403 
   404  共通Script、
   405  データベース操作及び待機時間は、
   406  前処理に追加可能な項目です。
   407 
   408  apidog
   409 
   410  ヒント
   411 
   412  Scriptの詳細を ここで見る。
   413 
   414 
   415  フロントエンド開発者: APIのMock
   416  APIのMockは、
   417  テストと開発の目的で使用されるAPIのシミュレートされたバージョンです。
   418  これにより、
   419  開発者はライブAPIに依存せずにアプリケーションやサービスをテストでき、
   420  送信のRequestに特定のResponseを返すように構成できます。
   421 
   422 
   423  指定されたAPIに基づいて、
   424  Apidogは設定なしでMockデータを自動的に生成できます。
   425  それはフロントエンド開発者にとって非常に便利な機能です。
   426 
   427 
   428  APIタブで ローカルMockを選択します.そして、
   429   Click the URL/パラメータをクリックして、
   430  「OK(200)」をコピーします。
   431 
   432  apidog
   433 
   434  ブラウザでURLを貼り付けます。
   435  そして、
   436  生成されたJSONが見えます。
   437  そのデータはダイナミックで、
   438  ページをリフレッシュする度にデータが変わります。
   439 
   440 
   441  特に、
   442  生成されたデータには、
   443  「email」や「lastName」のような項目があります。
   444  ご覧のように、
   445  これらの値は非常に合理的で現実みたいものになります。
   446  この機能は、
   447  Apidogの スマートMockと言います。
   448 
   449 
   450  apidog
   451 
   452  変更タブの Response 部分で 「ApiResponse」Schemaの 参照を解除 します。
   453 
   454  apidog
   455 
   456  ノード内の各 Mock値を入力して、
   457  APIを 保存 します。
   458 
   459  code
   460  200
   461  type
   462  JSON
   463  message
   464  Success
   465  apidog
   466 
   467  ブラウザでページを再読み込みすると、
   468  JSONデータが更新され、
   469  「code」、
   470  「type」、
   471  および「message」フィールドが設定に従って生成されます。
   472  現在、
   473  フロントエンド開発者は単にURLを使用して、
   474  開発中のクライアントでデータを取得できるようになります。
   475 
   476  apidog
   477 
   478  Mock設定は、
   479  Faker.jsをもサポートしています。
   480  任意のFaker.js文法を選択してダイナミックのMockデータを生成できます。
   481 
   482  apidog
   483 
   484  MockのResponseを修正する必要がある場合、
   485   設定 - 機能設定 - Mock設定 - デフォルトMockタイプの順にクリックし、
   486   Response例を優先に切り替えます。
   487  ApidogのMockエンジンは、
   488   API Responseの例をMockのResponseとして使用します。
   489 
   490  apidog
   491 
   492  ヒント
   493 
   494  ApidogのMock機能は、
   495  クラウドMockもサポートし、
   496  さまざまなRequestパラメータに対して異なるMock Responseを返したり、
   497  Scriptを使用してMockのResponseを書き換えたり、
   498  賢いMockマッチングルールをカスタマイズしたりすることができます。
   499 
   500  Mockの詳細を ここでを見る。
   501 
   502 
   503  QAエンジニア:APIのテスト
   504  Apidogの自動テストモジュールにより、
   505  QAエンジニアはAPIの定義またはAPIケースを参照して、
   506  テストのシナリオを直接に生成できます。
   507  データ駆動型テストをサポートし、
   508  ダイナミックのテストデータを簡単に生成できます。
   509  また、
   510  アサーションと変数抽出機能により、
   511  テストケースの作成を非常に簡単にしました。
   512  ApidogはCI/CDもサポートしています。
   513 
   514 
   515  アサーション
   516  Apidogでは、
   517  後処理でサーションを追加することができます。
   518  また、
   519  Postman SDKを使用してカスタムスScriptでアサーションステートメントを追加することもサポートしています。
   520 
   521 
   522  Get user by id - Successという保存ケースに移動して、
   523   後処理 タブで 後処理を追加 - アサーションの順にクリックします。
   524 
   525  apidog
   526 
   527  アサーションで次のパラメータを設定します:
   528  Response JSON
   529  $.code
   530  Assertion
   531  等しくない: 200
   532  ヒント
   533 
   534  JsonPathの詳細を ここで見る。
   535 
   536 
   537  apidog
   538 
   539  Reuqestを送信すると、
   540  アサーション結果を確認できます。
   541 
   542 
   543  Apidogは、
   544  Response JSONから$.codeの値を取得して、
   545  アサーションと比較します。
   546  マッチングする場合、
   547  アサーション結果は合格になります。
   548 
   549 
   550  apidog
   551 
   552  後処理では、
   553  変数抽出, カスタムScript, 共通Script, データベース操作と 待機時間も追加されることができます。
   554 
   555 
   556  MySQL
   557  SQL Server
   558  Oracle
   559  PostgreSQL
   560  およびClickHouseデータベースは、
   561  Apidogでサポートされています。
   562  SQLステートメントを実行でき、
   563  SELECT結果を変数に抽出できます。
   564  INSERT、
   565  DELETE、
   566  UPDATEなどの他のSQLも実行できます。
   567 
   568 
   569  apidog
   570 
   571  ヒント
   572 
   573  データベース操作の詳細を ここで見る。
   574 
   575 
   576  シナリオテスト
   577  アサーションを書いた後、
   578  複数のAPIケースを同じ単一のテストケースにインポートし、
   579  1クリックで実行してテストレポートを生成します。
   580 
   581 
   582  自動テストモジュールにアクセスして、
   583   新規テストケースを作成します。
   584 
   585  APidog
   586 
   587  当該ケースの設定を終了してそれにアクセスします。
   588   ステップを追加をクリックして、
   589   APIテストケースからインポートするを選択します。
   590 
   591  APidog
   592 
   593  テストのステップとして、
   594  保存したAPICaseを選択して、
   595  「確認」をクリックしてインポートします。
   596 
   597  APidog
   598 
   599  テストケースを行うには、
   600   実行ボタンをクリックします。
   601  そして、
   602  詳細なテストレポートが作成され、
   603  各Requestの詳細を確認することができます。
   604 
   605  apidog
   606 
   607  失敗した項目で 詳細をクリックし、
   608  Responseとアサーションを比較して、
   609  うまく行かなかった原因をチェックできます。
   610 
   611  apidog
   612 
   613  apidog
   614 
   615  ヒント
   616 
   617  テストケースの詳細を ここで見る。
   618 
   619 
   620  データ駆動型テスト
   621  APIケースで変数が使用される場合、
   622  データテーブルか「動的値」機能を使用して変数の値を自動的に生成するように設定できます。
   623 
   624 
   625  テストデータをオンにして、
   626   テストデータを管理するをクリックします。
   627 
   628  apidog
   629 
   630  変数とデータベースを追加し、
   631  変数の値も設定します。
   632  ここでCSVJSONからインポートすることもサポートされます。
   633  保存をクリックして、
   634  テストデータの設定を保存します。
   635 
   636  apidog
   637 
   638  ここテストデータを利用するかを選択して 実行します。
   639  変数の値は、
   640  テストケースの反復で使用されます。
   641 
   642  apidog
   643 
   644  ヒント
   645 
   646  テストデータの詳細を ここで見る。
   647 
   648 
   649  CI / CD
   650  Apidogはコマンドラインでの実行をサポートしています。
   651  Apidog CLIをインストールした後、
   652  apidog runコマンドを使用してコマンドラインのテストレポートを取得できます。
   653  このコマンドは、
   654  Jenkinsでも利用して、
   655  CI/CDを実装できます。
   656 
   657 
   658  テストケースで「CI/CD」をクリックします。
   659 
   660  Apidog
   661 
   662  テストのパラメータを設定して保存すると、
   663  コマンドラインが生成されます。
   664  ここで さらに詳しくをクリックしてApidog CLIをインストールします。
   665 
   666  apidog
   667 
   668  ヒント
   669 
   670  CI / CDの詳細を ここで見る。
   671 
   672 
   673  APIの設計者 & APIユーザー: APIドキュメント
   674  APIの設計、
   675  開発、
   676  デバッグ
   677  テストが終了すると、
   678  APIは、
   679  他のユーザーが利用できるプロダクトになります。
   680  Apidogは綺麗なAPIドキュメントを生成できるため、
   681  開発チームはAPIを公開する時に役立ちます。
   682 
   683 
   684  共有モジュールにアクセスし、
   685   +新しい共有から共有項目を作成します。
   686 
   687  apidog
   688 
   689  APIドキュメント実行環境を選択すると、
   690  APIドキュメントの利用者は、
   691  ここで設定された環境を使用してAPIを実行できます。
   692 
   693  apidog
   694 
   695  「開く」をクリックして共有対象となるドキュメントをブラウザで開きます。
   696 
   697  apidog
   698 
   699  APIドキュメントが生成され、
   700  インターネット上で共有できます。
   701  また、
   702  共有したWebサイトで「送信」することもできます。
   703 
   704  APidog
   705 
   706  コードのサンプル機能は、
   707  APIのRequestコードを数十個のプログラミング言語で生成できます。
   708  そして、
   709  APIリーダーが生成されたコードで直接にAPIを呼び出すことが可能になります。
   710 
   711  APidog
   712 
   713  Responsesのコード生成 機能は、
   714  Responseデータの構造に従ってコードを生成できます。
   715  数十個のプログラミング言語がサポートされ、
   716  API利用者は、
   717  生成されたコードを直接に実装の段階で使用できます。
   718 
   719  apidog
   720 
   721  apidog
   722 
   723  ドキュメント機能では、
   724  カスタムドメイン
   725   上部のナビゲーション、
   726   カタログのスタイル, コンテンツのフッターなど、
   727  他にも多くのカスタム機能はサポートされています。
   728 
   729  apidog
   730 
   731  ベストプラクティス
   732  1.Apidogでは、
   733  API設計者(またはバックエンド開発者)がAPIの仕様を定義します。
   734 
   735 
   736  2.開発チームは協力して、
   737  ドキュメントをレビュー&改善し、
   738  APIユースケースの一貫性を確保します。
   739 
   740 
   741  3.Apidogを使用すると、
   742  フロントエンド開発者は自動的に生成されたMockデータで開発を開始でき、
   743  手動でMockルールを作成する必要はありません。
   744 
   745 
   746  4.バックエンド開発者は、
   747  開発中にAPIユースケースを使用してデバッグできます。
   748  デバッグ中にすべてのAPIユースケースが合格した場合、
   749  開発完了。
   750  また、
   751  開発中にAPIの変更がある場合、
   752  APIドキュメントもデバッグ中に自動的に更新され、
   753  最小限の手間で適時にAPIメンテナンスを行えます。
   754 
   755 
   756  5.デバッグ後、
   757  バックエンド開発者はAPIユースケースとして機能を簡単に保存できます。
   758 
   759 
   760  6.QAエンジニアは、
   761  APIユースケースを使用してAPIを直接にテストできます。
   762 
   763 
   764  7.すべてのAPIが開発されると、
   765  QAエンジニア(またはバックエンド開発者)は、
   766  テストケースとテストコレクション機能を使用して、
   767  全面的に複数のAPIインテグレーションテストを実施できます。
   768 
   769 
   770  8.フロントエンドとバックエンド開発の共同デバッグは、
   771  両方のチームが同じなAPIの仕様に準拠しているため、
   772  フロントエンド開発者がMockデータから実際のデータに切り替える時にも、
   773  通常問題が発生しません。
   774 
   775 
   776  9.API開発が完了すると、
   777  Apidogは綺麗なAPIドキュメントを生成し、
   778  開発チームがAPIを外部チームに簡単に公開できます。
   779 
   780 
   781  上記は、
   782  Apidogのコア機能と操作ガイドの概要です。
   783  Apidogには、
   784  開発チームがAPIを効率的に開発してデバッグするのに役立つ機能がたくさん備えていますので、
   785  今すぐApodogの使用を開始して探索し始めましょう。
   786 
   787 
   788 
   789 

apidog toka

Apidogを使い回す
本文では、
Apidogを利用し始めようとするユーザーに対して、
コア機能を紹介します。

30分間ほどの所要時間が必要です。


Apidogが選ばれた理由
開発チームがAPIの設計、
管理、
テストのために、
Postman、
Swagger、
Stoplight、
Jmeterなどのさまざまなツールを使用していることが多いことを観察しました。
ただし、
これらのツール間でのデータ同期とコラボレーションがないので、
効率が大幅に下がる可能性があります。


開発チーム全体が単一のAPIツール内ですべての作業をやり遂げるのは、
より良い解決策だろうと思っています。
APIドキュメントが定義されている限り、
バックエンド開発者はAPIを簡単に実装して自己テストを行い、
フロントエンド開発者はAPIを簡単に呼び出してMockデータを使用し、
テストエンジニアはAPIを直接テストしてテストケースを簡単に生成できたら、
チーム協同作業の効率が大幅に向上できるのでしょう。


これこそ、
私たちはApidogを始めたきっかけです。
Apidogは、
チームの協同作業のために設計されていて、
APIの設計、
開発、
テスト、
管理、
ドキュメント生成やMockなどのことが実現され、
今までにない包括的なAPIツールです。


Apidogとは
Apidogは、
API開発のためのオールインワンツールキットです。
チーム全体が協力して、
APIをより効率的かつ便利に作成するために開発されているものです。
チームの各メンバーは、
それを使って自分の問題解決を図ることができます。


apidog

Apidogは、
APIの設計と開発をユーザーインターフェイスより優先する開発アプローチ(いわゆるAPIファーストアプローチ)を採用しています。
このアプローチには、
次のようないくつかのメリットがあります。


Apidogを使用すると、
チームの各メンバーは同時に作業を進んでサービス間で合意を達成することで、
複数のAPIで同時に作業し、
開発速度を大幅に向上させることができます。

自動化は、
APIの定義ファイルのインポートツールを通して実現され、
APIの開発と実行に必要な時間を短縮できます。

直感的なデザインと十分に文書化されたAPIドキュメントにより、
開発者の優れたエクスペリエンスが保証されます。
また、
開発者が簡単にコードを使用・再利用し、
新しい開発者をオンボードし、
学習コストを減らすこともできます。

コードが書かれる前にも、
ほとんどの問題を解決することができるので、
APIをアプリケーションに統合する際に問題を発生することを防ぐこともできます。

API設計者:APIの作成
API設計者はApidogを使用して、
APIを視覚的に作成するか、
OpenAPIの仕様からインポートします。


OpenAPIの仕様からインポート
APIがOpenAPIまたはその他の形式で指定されている場合は、
Apidogにインポートすると、
簡単にデバッグ
テスト、
またはMockすることができます。


Apidogのプロジェクトで インポートをクリックします。

Import

URLのインポートを選択して、
次のURLを貼り付けて、
 提出をクリックします。

https://petstore.swagger.io/v2/swagger.json
apidog

JSONYAMLファイルからのインポートも可能ですが、
Apidog、
HARなど、
他のAPI仕様の形式もサポートされています。


確認をクリックしてインポートします。

apidog

ここでApidogを使用してAPIを実行するか、
テストすることができます。

apidog

ヒント

データのインポートの詳細を ここで見る。


新しいAPIを作成
API設計者は非常に直感的なインターフェース内でAPIを作成できます。


新しいタブで 新しいAPI をクリックしてエンドポイントを作成します。

apidog

次に、
IDでユーザー情報を照会するためのAPIを指定します。
そのため、
次のフィールドをAPIに入力できます。

APIパス:
/users/{id}
名前:
IDでユーザー情報を取得
apidog

このAPIには、
QueryパラメータとBodyパラメータがありません。
ここで「Id」がPathパラメータとして認識されると、
「Request」の部分が完成しました。

Response 部分に移動して、
「OK (200)」でルートノードのフィールドタイプを「参照モデル → Schemas → ApiResponse」に変更します。

apidog

ここでAPIは、
次のような一般のJSON構造を生成しました。
全てのAPIも異なる「data」フィールドがあるため、
ルートノードに「data」と名付けられた子ノードを追加します。

apidog

「data」ノードのフィールドタイプを「参照モデル → Schemas → User」に変更します。

apidog

ここでResponseをうまく設定できました。
「data」構造内のデータを編集する場合は、
スキーマ参照を解除するか、
編集したいフィールドの参照を解除する必要があります。

apidog

ヒント

データSchemaの詳細を ここで見る。


Responseの例の部分に移動して、
 例を追加をクリックします。

apidog

例の名称を「Success」に設定します。
ここで 自動生成をクリックして、
戻りデータがResponse構造に基づいて生成されます。
 OK をクリックして例を追加します。

apidog

保存をクリックして、
APIの作成が完了しました。
ここでうまく設計されたAPIが手に入れましたよ。

apidog

バックエンド開発者:APIの開発とデバッグ
異なるチームは異なる開発アプローチを採用しています。
APIファーストを採用しているチームもありますし、
コードファーストを採用しているのもあります。
ただし、
チームがどの方法を採用していても、
バックエンド開発者はApidogを使用してAPIの開発とデバッグを簡単に実現できます。


コードの生成
APIが指定された場合、
 スタブサーバーとクライアントSDKが簡単に生成されます。
APIページで コード生成 ボタンから すべてのコードを生成をクリックするだけです。

apidog

OpenAPI Generatorエンジンを利用して、
スタブサーバーとクライアントSDKを数十個の言語で生成できます。

apidog

ヒント

コード生成の詳細を ここで見る。


APIを実行
APIの開発が完了すると、
多くの場合ではバックエンドの開発者は、
APIが異なるパラメータで正確な結果を返すかをデバッグする必要があります。
Apidogを使用すると、
APIデバッグし、
正常に実行できることを簡単に確認できます。


先に作成したAPIのページで、
 実行ボタンをクリックして 実行 タブに移動します。

apidog

「id」パラメータのパラメータ値で「1」を入力します。
ここで送信待ちのrequest URLの中の {id} は、
「1」に置き換えられます。

apidog

画面の右上角の 環境の管理ボタンをクリックします。

apidog

「テスト環境」に切り替えて、
次のURLを「Default Sever」サービスに貼り付けます。
その後、
環境を保存します。

https://mock.apidog.com/m1/352945-0-default
ヒント

環境管理の詳細を ここで見る。


apidog

そして、
「Testing Env」を選択すると、
先に設定したBase URLは、
送信待ちのすべてのrequestsの先頭に追加されます。

apidog

送信をクリックしてRequestを送信します。
APIのResponseは下の部分で表示されます。

apidog

デバッグ
APIの開発が環境を設定した後、
 バックエンド開発者は、
期待のデータを返しているか、
APIが正しいロジックを実装しているかをテストする必要があります。


pathパラメータの値を「2」に設定して、
 Requestを 送信します。

apidog

「.data.id should be integer」という警告が表示されます。
なぜかというと、
.data.idshouldbeinteger」という警告が表示されます。
なぜかというと、
.data.idはintegerである必要がありますが、
実際に返された$.data.idはStringになっているからです。

apidog

Apidogは、
APIの定義と実際のResponseが一貫しているかどうかを自動的に検証します。
正しくないデータタイプ、
定義されていない列挙値、
必須フィールドの欠落などの問題は自動的に検出されます。
バックエンド開発者は、
戻りデータの問題を簡単に検出できます。

APICaseを保存ボタンをクリックしてRequestを保存します。
 当該RequestはAPIの子ディレクトリに保存され、
テストモジュールに参照されることができます。

apidog

apidog

変数の利用
Apidogでは、
変数がRequest間で再利用可能な値を格納するために利用されています。


環境変数は環境に繋がっています。
つまり、
特定の環境が選択された場合にのみアクセス可能です。
一方、
グローバル変数は、
すべての環境でアクセスできます。


Apidogの「環境の管理」セクションで環境変数を定義し、
{{variableName}}のように二重波括弧を使用して、
Requestで環境変数を参照できます。


例:

pathパラメータ「id」の値に{{Userid}}を入力します。

apidog

環境管理をクリックします。
 Useridと名付けられた変数を新しく追加し、
 ローカル値に「1」を記入して、
変数を保存します。

apidog

Requestを送信します。
 Response - 実際のRequestの順にrequest URLを確認できます。
ここで {{Userid}} は ローカル値に置き換えられたことを確認できます。

apidog

ヒント

変数の詳細を ここを見る。


前処理
Apidogでは、
前処理はRequestを送信する前に実行される操作です。
これにより、
Requestが送信される前にRequestと環境変数を操作できます。


前処理の利用シーン:

Requestで利用されている変数の設定と編集
データ検証、
またはデータ変換の実行
Headerの追加と編集
ログ情報とデータのデバッグ
他のReuqestを行い、
そのResponseデータを変数への保存
Request URLの編集
これらの操作はJavaScriptに書き込まれ、
Postman SDKでRequest、
Responseオブジェクト、
環境変数
及びグローバル変数にアクセスできます。
Scriptが追加されると、
Requestが送信されるたびに実行されます。


前処理のRequestパラメータ値を変更する例:

前処理タブをクリックし、
 前処理を追加 ボタンをクリックして カスタムScriptを追加します。

apidog

次のScriptを カスタムScriptエリアに貼り付けます。

let Userid = parseInt(pm.environment.get("Userid"));
Userid = Userid + 1;
console.log(Userid);
pm.environment.set("Userid", Userid);
apidog

カスタムScript を 変数置換&親を継承にドラッグして、
Requestを送信します。

apidog

送信した後、
 {{Userid}}の値が2になったことを確認できます。
そして、
Requestを複数回送信する場合、
送信する度に、
 {{Userid}} の値に1をプラスするようになります。

apidog

共通Script、
データベース操作及び待機時間は、
前処理に追加可能な項目です。

apidog

ヒント

Scriptの詳細を ここで見る。


フロントエンド開発者: APIのMock
APIのMockは、
テストと開発の目的で使用されるAPIのシミュレートされたバージョンです。
これにより、
開発者はライブAPIに依存せずにアプリケーションやサービスをテストでき、
送信のRequestに特定のResponseを返すように構成できます。


指定されたAPIに基づいて、
Apidogは設定なしでMockデータを自動的に生成できます。
それはフロントエンド開発者にとって非常に便利な機能です。


APIタブで ローカルMockを選択します.そして、
 Click the URL/パラメータをクリックして、
「OK(200)」をコピーします。

apidog

ブラウザでURLを貼り付けます。
そして、
生成されたJSONが見えます。
そのデータはダイナミックで、
ページをリフレッシュする度にデータが変わります。


特に、
生成されたデータには、
「email」や「lastName」のような項目があります。
ご覧のように、
これらの値は非常に合理的で現実みたいものになります。
この機能は、
Apidogの スマートMockと言います。


apidog

変更タブの Response 部分で 「ApiResponse」Schemaの 参照を解除 します。

apidog

ノード内の各 Mock値を入力して、
APIを 保存 します。

code
200
type
JSON
message
Success
apidog

ブラウザでページを再読み込みすると、
JSONデータが更新され、
「code」、
「type」、
および「message」フィールドが設定に従って生成されます。
現在、
フロントエンド開発者は単にURLを使用して、
開発中のクライアントでデータを取得できるようになります。

apidog

Mock設定は、
Faker.jsをもサポートしています。
任意のFaker.js文法を選択してダイナミックのMockデータを生成できます。

apidog

MockのResponseを修正する必要がある場合、
 設定 - 機能設定 - Mock設定 - デフォルトMockタイプの順にクリックし、
 Response例を優先に切り替えます。
ApidogのMockエンジンは、
 API Responseの例をMockのResponseとして使用します。

apidog

ヒント

ApidogのMock機能は、
クラウドMockもサポートし、
さまざまなRequestパラメータに対して異なるMock Responseを返したり、
Scriptを使用してMockのResponseを書き換えたり、
賢いMockマッチングルールをカスタマイズしたりすることができます。

Mockの詳細を ここでを見る。


QAエンジニア:APIのテスト
Apidogの自動テストモジュールにより、
QAエンジニアはAPIの定義またはAPIケースを参照して、
テストのシナリオを直接に生成できます。
データ駆動型テストをサポートし、
ダイナミックのテストデータを簡単に生成できます。
また、
アサーションと変数抽出機能により、
テストケースの作成を非常に簡単にしました。
ApidogはCI/CDもサポートしています。


アサーション
Apidogでは、
後処理でサーションを追加することができます。
また、
Postman SDKを使用してカスタムスScriptでアサーションステートメントを追加することもサポートしています。


Get user by id - Successという保存ケースに移動して、
 後処理 タブで 後処理を追加 - アサーションの順にクリックします。

apidog

アサーションで次のパラメータを設定します:
Response JSON
$.code
Assertion
等しくない: 200
ヒント

JsonPathの詳細を ここで見る。


apidog

Reuqestを送信すると、
アサーション結果を確認できます。


Apidogは、
Response JSONから$.codeの値を取得して、
アサーションと比較します。
マッチングする場合、
アサーション結果は合格になります。


apidog

後処理では、
変数抽出, カスタムScript, 共通Script, データベース操作と 待機時間も追加されることができます。


MySQL
SQL Server
Oracle
PostgreSQL
およびClickHouseデータベースは、
Apidogでサポートされています。
SQLステートメントを実行でき、
SELECT結果を変数に抽出できます。
INSERT、
DELETE、
UPDATEなどの他のSQLも実行できます。


apidog

ヒント

データベース操作の詳細を ここで見る。


シナリオテスト
アサーションを書いた後、
複数のAPIケースを同じ単一のテストケースにインポートし、
1クリックで実行してテストレポートを生成します。


自動テストモジュールにアクセスして、
 新規テストケースを作成します。

APidog

当該ケースの設定を終了してそれにアクセスします。
 ステップを追加をクリックして、
 APIテストケースからインポートするを選択します。

APidog

テストのステップとして、
保存したAPICaseを選択して、
「確認」をクリックしてインポートします。

APidog

テストケースを行うには、
 実行ボタンをクリックします。
そして、
詳細なテストレポートが作成され、
各Requestの詳細を確認することができます。

apidog

失敗した項目で 詳細をクリックし、
Responseとアサーションを比較して、
うまく行かなかった原因をチェックできます。

apidog

apidog

ヒント

テストケースの詳細を ここで見る。


データ駆動型テスト
APIケースで変数が使用される場合、
データテーブルか「動的値」機能を使用して変数の値を自動的に生成するように設定できます。


テストデータをオンにして、
 テストデータを管理するをクリックします。

apidog

変数とデータベースを追加し、
変数の値も設定します。
ここでCSVJSONからインポートすることもサポートされます。
保存をクリックして、
テストデータの設定を保存します。

apidog

ここテストデータを利用するかを選択して 実行します。
変数の値は、
テストケースの反復で使用されます。

apidog

ヒント

テストデータの詳細を ここで見る。


CI / CD
Apidogはコマンドラインでの実行をサポートしています。
Apidog CLIをインストールした後、
apidog runコマンドを使用してコマンドラインのテストレポートを取得できます。
このコマンドは、
Jenkinsでも利用して、
CI/CDを実装できます。


テストケースで「CI/CD」をクリックします。

Apidog

テストのパラメータを設定して保存すると、
コマンドラインが生成されます。
ここで さらに詳しくをクリックしてApidog CLIをインストールします。

apidog

ヒント

CI / CDの詳細を ここで見る。


APIの設計者 & APIユーザー: APIドキュメント
APIの設計、
開発、
デバッグ
テストが終了すると、
APIは、
他のユーザーが利用できるプロダクトになります。
Apidogは綺麗なAPIドキュメントを生成できるため、
開発チームはAPIを公開する時に役立ちます。


共有モジュールにアクセスし、
 +新しい共有から共有項目を作成します。

apidog

APIドキュメント実行環境を選択すると、
APIドキュメントの利用者は、
ここで設定された環境を使用してAPIを実行できます。

apidog

「開く」をクリックして共有対象となるドキュメントをブラウザで開きます。

apidog

APIドキュメントが生成され、
インターネット上で共有できます。
また、
共有したWebサイトで「送信」することもできます。

APidog

コードのサンプル機能は、
APIのRequestコードを数十個のプログラミング言語で生成できます。
そして、
APIリーダーが生成されたコードで直接にAPIを呼び出すことが可能になります。

APidog

Responsesのコード生成 機能は、
Responseデータの構造に従ってコードを生成できます。
数十個のプログラミング言語がサポートされ、
API利用者は、
生成されたコードを直接に実装の段階で使用できます。

apidog

apidog

ドキュメント機能では、
カスタムドメイン
 上部のナビゲーション、
 カタログのスタイル, コンテンツのフッターなど、
他にも多くのカスタム機能はサポートされています。

apidog

ベストプラクティス
1.Apidogでは、
API設計者(またはバックエンド開発者)がAPIの仕様を定義します。


2.開発チームは協力して、
ドキュメントをレビュー&改善し、
APIユースケースの一貫性を確保します。


3.Apidogを使用すると、
フロントエンド開発者は自動的に生成されたMockデータで開発を開始でき、
手動でMockルールを作成する必要はありません。


4.バックエンド開発者は、
開発中にAPIユースケースを使用してデバッグできます。
デバッグ中にすべてのAPIユースケースが合格した場合、
開発完了。
また、
開発中にAPIの変更がある場合、
APIドキュメントもデバッグ中に自動的に更新され、
最小限の手間で適時にAPIメンテナンスを行えます。


5.デバッグ後、
バックエンド開発者はAPIユースケースとして機能を簡単に保存できます。


6.QAエンジニアは、
APIユースケースを使用してAPIを直接にテストできます。


7.すべてのAPIが開発されると、
QAエンジニア(またはバックエンド開発者)は、
テストケースとテストコレクション機能を使用して、
全面的に複数のAPIインテグレーションテストを実施できます。


8.フロントエンドとバックエンド開発の共同デバッグは、
両方のチームが同じなAPIの仕様に準拠しているため、
フロントエンド開発者がMockデータから実際のデータに切り替える時にも、
通常問題が発生しません。


9.API開発が完了すると、
Apidogは綺麗なAPIドキュメントを生成し、
開発チームがAPIを外部チームに簡単に公開できます。


上記は、
Apidogのコア機能と操作ガイドの概要です。
Apidogには、
開発チームがAPIを効率的に開発してデバッグするのに役立つ機能がたくさん備えていますので、
今すぐApodogの使用を開始して探索し始めましょう。

 

 

 

 

openapi yaml つかってみた

★★

:/var/www/html/demo5# ls
openapi.yaml
:/var/www/html/demo5# fastapi-codegen    --input openapi.yaml --output output --generate-routers --model-file models.py
:/var/www/html/demo5# ls
openapi.yaml  output
:/var/www/html/demo5# ls -l output
total 16
-rw-r--r-- 1 root root  347 Jan  2 04:42 dependencies.py
-rw-r--r-- 1 root root 1699 Jan  2 04:42 main.py
-rw-r--r-- 1 root root 2700 Jan  2 04:42 models.py
drwxr-xr-x 2 root root 4096 Jan  2 04:42 routers
:/var/www/html/demo5# 
:/var/www/html/demo5# datamodel-codegen  --input openapi.yaml --input-file-type openapi --output ./output/schemas.py
:/var/www/html/demo5# 
:/var/www/html/demo5# ls -l output
total 20
-rw-r--r-- 1 root root  347 Jan  2 04:42 dependencies.py
-rw-r--r-- 1 root root 1699 Jan  2 04:42 main.py
-rw-r--r-- 1 root root 2700 Jan  2 04:42 models.py
drwxr-xr-x 2 root root 4096 Jan  2 04:42 routers
-rw-r--r-- 1 root root 2418 Jan  2 04:42 schemas.py
:/var/www/html/demo5# 

 

 
★openapi.yaml
 
     1 openapi: 3.0.3
     2 info:
     3   title: Swagger Petstore - OpenAPI 3.0
     4   description: |-
     5     This is a sample Pet Store Server based on the OpenAPI 3.0 specification.  You can find out more about
     6     Swagger at https://swagger.io(https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!
     7     You can now help us improve the API whether it's by making changes to the definition itself or to the code.
     8     That way, with time, we can improve the API in general, and expose some of the new features in OAS3.
     9
    10     _If you're looking for the Swagger 2.0/OAS 2.0 version of Petstore, then click [here](https://editor.swagger.io/?url=https://petstore.swagger.io/v2/swagger.yaml). Alternatively, you can load via the `Edit > Load Petstore OAS 2.0` menu option!_
    11     
    12     Some useful links:
    13     - [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)
    15   termsOfService: http://swagger.io/terms/
    16   contact:
    17     email: apiteam@swagger.io
    18   license:
    19     name: Apache 2.0
    21   version: 1.0.11
    22 externalDocs:
    23   description: Find out more about Swagger
    24   url: http://swagger.io
    25 servers:
    27 tags:
    28   - name: pet
    29     description: Everything about your Pets
    30     externalDocs:
    31       description: Find out more
    32       url: http://swagger.io
    33   - name: store
    34     description: Access to Petstore orders
    35     externalDocs:
    36       description: Find out more about our store
    37       url: http://swagger.io
    38   - name: user
    39     description: Operations about user
    40 paths:
    41   /pet:
    42     put:
    43       tags:
    44         - pet
    45       summary: Update an existing pet
    46       description: Update an existing pet by Id
    47       operationId: updatePet
    48       requestBody:
    49         description: Update an existent pet in the store
    50         content:
    51           application/json:
    52             schema:
    53               $ref: '#/components/schemas/Pet'
    54           application/xml:
    55             schema:
    56               $ref: '#/components/schemas/Pet'
    57           application/x-www-form-urlencoded:
    58             schema:
    59               $ref: '#/components/schemas/Pet'
    60         required: true
    61       responses:
    62         '200':
    63           description: Successful operation
    64           content:
    65             application/json:
    66               schema:
    67                 $ref: '#/components/schemas/Pet'          
    68             application/xml:
    69               schema:
    70                 $ref: '#/components/schemas/Pet'
    71         '400':
    72           description: Invalid ID supplied
    73         '404':
    74           description: Pet not found
    75         '405':
    76           description: Validation exception
    77       security:
    78         - petstore_auth:
    79             - write:pets
    80             - read:pets
    81     post:
    82       tags:
    83         - pet
    84       summary: Add a new pet to the store
    85       description: Add a new pet to the store
    86       operationId: addPet
    87       requestBody:
    88         description: Create a new pet in the store
    89         content:
    90           application/json:
    91             schema:
    92               $ref: '#/components/schemas/Pet'
    93           application/xml:
    94             schema:
    95               $ref: '#/components/schemas/Pet'
    96           application/x-www-form-urlencoded:
    97             schema:
    98               $ref: '#/components/schemas/Pet'
    99         required: true
   100       responses:
   101         '200':
   102           description: Successful operation
   103           content:
   104             application/json:
   105               schema:
   106                 $ref: '#/components/schemas/Pet'          
   107             application/xml:
   108               schema:
   109                 $ref: '#/components/schemas/Pet'
   110         '405':
   111           description: Invalid input
   112       security:
   113         - petstore_auth:
   114             - write:pets
   115             - read:pets
   116   /pet/findByStatus:
   117     get:
   118       tags:
   119         - pet
   120       summary: Finds Pets by status
   121       description: Multiple status values can be provided with comma separated strings
   122       operationId: findPetsByStatus
   123       parameters:
   124         - name: status
   125           in: query
   126           description: Status values that need to be considered for filter
   127           required: false
   128           explode: true
   129           schema:
   130             type: string
   131             default: available
   132             enum:
   133               - available
   134               - pending
   135               - sold
   136       responses:
   137         '200':
   138           description: successful operation
   139           content:
   140             application/json:
   141               schema:
   142                 type: array
   143                 items:
   144                   $ref: '#/components/schemas/Pet'          
   145             application/xml:
   146               schema:
   147                 type: array
   148                 items:
   149                   $ref: '#/components/schemas/Pet'
   150         '400':
   151           description: Invalid status value
   152       security:
   153         - petstore_auth:
   154             - write:pets
   155             - read:pets
   156   /pet/findByTags:
   157     get:
   158       tags:
   159         - pet
   160       summary: Finds Pets by tags
   161       description: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
   162       operationId: findPetsByTags
   163       parameters:
   164         - name: tags
   165           in: query
   166           description: Tags to filter by
   167           required: false
   168           explode: true
   169           schema:
   170             type: array
   171             items:
   172               type: string
   173       responses:
   174         '200':
   175           description: successful operation
   176           content:
   177             application/json:
   178               schema:
   179                 type: array
   180                 items:
   181                   $ref: '#/components/schemas/Pet'          
   182             application/xml:
   183               schema:
   184                 type: array
   185                 items:
   186                   $ref: '#/components/schemas/Pet'
   187         '400':
   188           description: Invalid tag value
   189       security:
   190         - petstore_auth:
   191             - write:pets
   192             - read:pets
   193   /pet/{petId}:
   194     get:
   195       tags:
   196         - pet
   197       summary: Find pet by ID
   198       description: Returns a single pet
   199       operationId: getPetById
   200       parameters:
   201         - name: petId
   202           in: path
   203           description: ID of pet to return
   204           required: true
   205           schema:
   206             type: integer
   207             format: int64
   208       responses:
   209         '200':
   210           description: successful operation
   211           content:
   212             application/json:
   213               schema:
   214                 $ref: '#/components/schemas/Pet'          
   215             application/xml:
   216               schema:
   217                 $ref: '#/components/schemas/Pet'
   218         '400':
   219           description: Invalid ID supplied
   220         '404':
   221           description: Pet not found
   222       security:
   223         - api_key:
   224         - petstore_auth:
   225             - write:pets
   226             - read:pets
   227     post:
   228       tags:
   229         - pet
   230       summary: Updates a pet in the store with form data
   231       description: ''
   232       operationId: updatePetWithForm
   233       parameters:
   234         - name: petId
   235           in: path
   236           description: ID of pet that needs to be updated
   237           required: true
   238           schema:
   239             type: integer
   240             format: int64
   241         - name: name
   242           in: query
   243           description: Name of pet that needs to be updated
   244           schema:
   245             type: string
   246         - name: status
   247           in: query
   248           description: Status of pet that needs to be updated
   249           schema:
   250             type: string
   251       responses:
   252         '405':
   253           description: Invalid input
   254       security:
   255         - petstore_auth:
   256             - write:pets
   257             - read:pets
   258     delete:
   259       tags:
   260         - pet
   261       summary: Deletes a pet
   262       description: delete a pet
   263       operationId: deletePet
   264       parameters:
   265         - name: api_key
   266           in: header
   267           description: ''
   268           required: false
   269           schema:
   270             type: string
   271         - name: petId
   272           in: path
   273           description: Pet id to delete
   274           required: true
   275           schema:
   276             type: integer
   277             format: int64
   278       responses:
   279         '400':
   280           description: Invalid pet value
   281       security:
   282         - petstore_auth:
   283             - write:pets
   284             - read:pets
   285   /pet/{petId}/uploadImage:
   286     post:
   287       tags:
   288         - pet
   289       summary: uploads an image
   290       description: ''
   291       operationId: uploadFile
   292       parameters:
   293         - name: petId
   294           in: path
   295           description: ID of pet to update
   296           required: true
   297           schema:
   298             type: integer
   299             format: int64
   300         - name: additionalMetadata
   301           in: query
   302           description: Additional Metadata
   303           required: false
   304           schema:
   305             type: string
   306       requestBody:
   307         content:
   308           application/octet-stream:
   309             schema:
   310               type: string
   311               format: binary
   312       responses:
   313         '200':
   314           description: successful operation
   315           content:
   316             application/json:
   317               schema:
   318                 $ref: '#/components/schemas/ApiResponse'
   319       security:
   320         - petstore_auth:
   321             - write:pets
   322             - read:pets
   323   /store/inventory:
   324     get:
   325       tags:
   326         - store
   327       summary: Returns pet inventories by status
   328       description: Returns a map of status codes to quantities
   329       operationId: getInventory
   330       responses:
   331         '200':
   332           description: successful operation
   333           content:
   334             application/json:
   335               schema:
   336                 type: object
   337                 additionalProperties:
   338                   type: integer
   339                   format: int32
   340       security:
   341         - api_key:
   342   /store/order:
   343     post:
   344       tags:
   345         - store
   346       summary: Place an order for a pet
   347       description: Place a new order in the store
   348       operationId: placeOrder
   349       requestBody:
   350         content:
   351           application/json:
   352             schema:
   353               $ref: '#/components/schemas/Order'
   354           application/xml:
   355             schema:
   356               $ref: '#/components/schemas/Order'
   357           application/x-www-form-urlencoded:
   358             schema:
   359               $ref: '#/components/schemas/Order'
   360       responses:
   361         '200':
   362           description: successful operation
   363           content:
   364             application/json:
   365               schema:
   366                 $ref: '#/components/schemas/Order'
   367         '405':
   368           description: Invalid input
   369   /store/order/{orderId}:
   370     get:
   371       tags:
   372         - store
   373       summary: Find purchase order by ID
   374       description: For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.
   375       operationId: getOrderById
   376       parameters:
   377         - name: orderId
   378           in: path
   379           description: ID of order that needs to be fetched
   380           required: true
   381           schema:
   382             type: integer
   383             format: int64
   384       responses:
   385         '200':
   386           description: successful operation
   387           content:
   388             application/json:
   389               schema:
   390                 $ref: '#/components/schemas/Order'          
   391             application/xml:
   392               schema:
   393                 $ref: '#/components/schemas/Order'
   394         '400':
   395           description: Invalid ID supplied
   396         '404':
   397           description: Order not found
   398     delete:
   399       tags:
   400         - store
   401       summary: Delete purchase order by ID
   402       description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
   403       operationId: deleteOrder
   404       parameters:
   405         - name: orderId
   406           in: path
   407           description: ID of the order that needs to be deleted
   408           required: true
   409           schema:
   410             type: integer
   411             format: int64
   412       responses:
   413         '400':
   414           description: Invalid ID supplied
   415         '404':
   416           description: Order not found
   417   /user:
   418     post:
   419       tags:
   420         - user
   421       summary: Create user
   422       description: This can only be done by the logged in user.
   423       operationId: createUser
   424       requestBody:
   425         description: Created user object
   426         content:
   427           application/json:
   428             schema:
   429               $ref: '#/components/schemas/User'
   430           application/xml:
   431             schema:
   432               $ref: '#/components/schemas/User'
   433           application/x-www-form-urlencoded:
   434             schema:
   435               $ref: '#/components/schemas/User'
   436       responses:
   437         default:
   438           description: successful operation
   439           content:
   440             application/json:
   441               schema:
   442                 $ref: '#/components/schemas/User'
   443             application/xml:
   444               schema:
   445                 $ref: '#/components/schemas/User'
   446   /user/createWithList:
   447     post:
   448       tags:
   449         - user
   450       summary: Creates list of users with given input array
   451       description: Creates list of users with given input array
   452       operationId: createUsersWithListInput
   453       requestBody:
   454         content:
   455           application/json:
   456             schema:
   457               type: array
   458               items:
   459                 $ref: '#/components/schemas/User'
   460       responses:
   461         '200':
   462           description: Successful operation
   463           content:
   464             application/json:
   465               schema:
   466                 $ref: '#/components/schemas/User'          
   467             application/xml:
   468               schema:
   469                 $ref: '#/components/schemas/User'
   470         default:
   471           description: successful operation
   472   /user/login:
   473     get:
   474       tags:
   475         - user
   476       summary: Logs user into the system
   477       description: ''
   478       operationId: loginUser
   479       parameters:
   480         - name: username
   481           in: query
   482           description: The user name for login
   483           required: false
   484           schema:
   485             type: string
   486         - name: password
   487           in: query
   488           description: The password for login in clear text
   489           required: false
   490           schema:
   491             type: string
   492       responses:
   493         '200':
   494           description: successful operation
   495           headers:
   496             X-Rate-Limit:
   497               description: calls per hour allowed by the user
   498               schema:
   499                 type: integer
   500                 format: int32
   501             X-Expires-After:
   502               description: date in UTC when token expires
   503               schema:
   504                 type: string
   505                 format: date-time
   506           content:
   507             application/xml:
   508               schema:
   509                 type: string
   510             application/json:
   511               schema:
   512                 type: string
   513         '400':
   514           description: Invalid username/password supplied
   515   /user/logout:
   516     get:
   517       tags:
   518         - user
   519       summary: Logs out current logged in user session
   520       description: ''
   521       operationId: logoutUser
   522       parameters: []
   523       responses:
   524         default:
   525           description: successful operation
   526   /user/{username}:
   527     get:
   528       tags:
   529         - user
   530       summary: Get user by user name
   531       description: ''
   532       operationId: getUserByName
   533       parameters:
   534         - name: username
   535           in: path
   536           description: 'The name that needs to be fetched. Use user1 for testing. '
   537           required: true
   538           schema:
   539             type: string
   540       responses:
   541         '200':
   542           description: successful operation
   543           content:
   544             application/json:
   545               schema:
   546                 $ref: '#/components/schemas/User'          
   547             application/xml:
   548               schema:
   549                 $ref: '#/components/schemas/User'
   550         '400':
   551           description: Invalid username supplied
   552         '404':
   553           description: User not found
   554     put:
   555       tags:
   556         - user
   557       summary: Update user
   558       description: This can only be done by the logged in user.
   559       operationId: updateUser
   560       parameters:
   561         - name: username
   562           in: path
   563           description: name that need to be deleted
   564           required: true
   565           schema:
   566             type: string
   567       requestBody:
   568         description: Update an existent user in the store
   569         content:
   570           application/json:
   571             schema:
   572               $ref: '#/components/schemas/User'
   573           application/xml:
   574             schema:
   575               $ref: '#/components/schemas/User'
   576           application/x-www-form-urlencoded:
   577             schema:
   578               $ref: '#/components/schemas/User'
   579       responses:
   580         default:
   581           description: successful operation
   582     delete:
   583       tags:
   584         - user
   585       summary: Delete user
   586       description: This can only be done by the logged in user.
   587       operationId: deleteUser
   588       parameters:
   589         - name: username
   590           in: path
   591           description: The name that needs to be deleted
   592           required: true
   593           schema:
   594             type: string
   595       responses:
   596         '400':
   597           description: Invalid username supplied
   598         '404':
   599           description: User not found
   600 components:
   601   schemas:
   602     Order:
   603       type: object
   604       properties:
   605         id:
   606           type: integer
   607           format: int64
   608           example: 10
   609         petId:
   610           type: integer
   611           format: int64
   612           example: 198772
   613         quantity:
   614           type: integer
   615           format: int32
   616           example: 7
   617         shipDate:
   618           type: string
   619           format: date-time
   620         status:
   621           type: string
   622           description: Order Status
   623           example: approved
   624           enum:
   625             - placed
   626             - approved
   627             - delivered
   628         complete:
   629           type: boolean
   630       xml:
   631         name: order
   632     Customer:
   633       type: object
   634       properties:
   635         id:
   636           type: integer
   637           format: int64
   638           example: 100000
   639         username:
   640           type: string
   641           example: fehguy
   642         address:
   643           type: array
   644           xml:
   645             name: addresses
   646             wrapped: true
   647           items:
   648             $ref: '#/components/schemas/Address'
   649       xml:
   650         name: customer
   651     Address:
   652       type: object
   653       properties:
   654         street:
   655           type: string
   656           example: 437 Lytton
   657         city:
   658           type: string
   659           example: Palo Alto
   660         state:
   661           type: string
   662           example: CA
   663         zip:
   664           type: string
   665           example: '94301'
   666       xml:
   667         name: address
   668     Category:
   669       type: object
   670       properties:
   671         id:
   672           type: integer
   673           format: int64
   674           example: 1
   675         name:
   676           type: string
   677           example: Dogs
   678       xml:
   679         name: category
   680     User:
   681       type: object
   682       properties:
   683         id:
   684           type: integer
   685           format: int64
   686           example: 10
   687         username:
   688           type: string
   689           example: theUser
   690         firstName:
   691           type: string
   692           example: John
   693         lastName:
   694           type: string
   695           example: James
   696         email:
   697           type: string
   698           example: john@email.com
   699         password:
   700           type: string
   701           example: '12345'
   702         phone:
   703           type: string
   704           example: '12345'
   705         userStatus:
   706           type: integer
   707           description: User Status
   708           format: int32
   709           example: 1
   710       xml:
   711         name: user
   712     Tag:
   713       type: object
   714       properties:
   715         id:
   716           type: integer
   717           format: int64
   718         name:
   719           type: string
   720       xml:
   721         name: tag
   722     Pet:
   723       required:
   724         - name
   725         - photoUrls
   726       type: object
   727       properties:
   728         id:
   729           type: integer
   730           format: int64
   731           example: 10
   732         name:
   733           type: string
   734           example: doggie
   735         category:
   736           $ref: '#/components/schemas/Category'
   737         photoUrls:
   738           type: array
   739           xml:
   740             wrapped: true
   741           items:
   742             type: string
   743             xml:
   744               name: photoUrl
   745         tags:
   746           type: array
   747           xml:
   748             wrapped: true
   749           items:
   750             $ref: '#/components/schemas/Tag'
   751         status:
   752           type: string
   753           description: pet status in the store
   754           enum:
   755             - available
   756             - pending
   757             - sold
   758       xml:
   759         name: pet
   760     ApiResponse:
   761       type: object
   762       properties:
   763         code:
   764           type: integer
   765           format: int32
   766         type:
   767           type: string
   768         message:
   769           type: string
   770       xml:
   771         name: '##default'
   772   requestBodies:
   773     Pet:
   774       description: Pet object that needs to be added to the store
   775       content:
   776         application/json:
   777           schema:
   778             $ref: '#/components/schemas/Pet'
   779         application/xml:
   780           schema:
   781             $ref: '#/components/schemas/Pet'
   782     UserArray:
   783       description: List of user object
   784       content:
   785         application/json:
   786           schema:
   787             type: array
   788             items:
   789               $ref: '#/components/schemas/User'
   790   securitySchemes:
   791     petstore_auth:
   792       type: oauth2
   793       flows:
   794         implicit:
   795           authorizationUrl: https://petstore3.swagger.io/oauth/authorize
   796           scopes:
   797             write:pets: modify pets in your account
   798             read:pets: read your pets
   799     api_key:
   800       type: apiKey
   801       name: api_key
   802       in: header
   803
 
 
★output/dependencies.py
     1 # generated by fastapi-codegen:
     2 #   filename:  openapi.yaml
     3 #   timestamp: 2024-01-02T04:42:03+00:00
     4
     5 from __future__ import annotations
     6
     7 from typing import List, Optional, Union
     8
     9 from fastapi import Path, Query, Request
    10 from starlette.requests import Request
    11
    12 from .models import ApiResponse, Order, Pet, Status3, StoreInventoryGetResponse, User
 
 
 
★ output/main.py
    13 # generated by fastapi-codegen:
    14 #   filename:  openapi.yaml
    15 #   timestamp: 2024-01-02T04:42:03+00:00
    16
    17 from __future__ import annotations
    18
    19 from fastapi import FastAPI
    20
    21 from .routers import pet, store, user
    22
    23 app = FastAPI(
    24     title='Swagger Petstore - OpenAPI 3.0',
    25     description="This is a sample Pet Store Server based on the OpenAPI 3.0 specification.  You can find out more about\nSwagger at https://swagger.io(https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\n_If you're looking for the Swagger 2.0/OAS 2.0 version of Petstore, then click [here](https://editor.swagger.io/?url=https://petstore.swagger.io/v2/swagger.yaml). Alternatively, you can load via the `Edit > Load Petstore OAS 2.0` menu option!_\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)",
    26     termsOfService='http://swagger.io/terms/',
    27     contact={'email': 'apiteam@swagger.io'},
    28     license={
    29         'name': 'Apache 2.0',
    31     },
    32     version='1.0.11',
    33     servers=[{'url': 'https://petstore3.swagger.io/api/v3'}],
    34 )
    35
    36 app.include_router(pet.router)
    37 app.include_router(store.router)
    38 app.include_router(user.router)
    39
    40
    41 @app.get("/")
    42 async def root():
    43     return {"message": "Gateway of the App"}
 
 
★output/models.py
    44 # generated by fastapi-codegen:
    45 #   filename:  openapi.yaml
    46 #   timestamp: 2024-01-02T04:42:03+00:00
    47
    48 from __future__ import annotations
    49
    50 from datetime import datetime
    51 from enum import Enum
    52 from typing import Dict, List, Optional
    53
    54 from pydantic import BaseModel, Field
    55
    56
    57 class Status(Enum):
    58     placed = 'placed'
    59     approved = 'approved'
    60     delivered = 'delivered'
    61
    62
    63 class Order(BaseModel):
    64     id: Optional[int] = Field(None, example=10)
    65     petId: Optional[int] = Field(None, example=198772)
    66     quantity: Optional[int] = Field(None, example=7)
    67     shipDate: Optional[datetime] = None
    68     status: Optional[Status] = Field(
    69         None, description='Order Status', example='approved'
    70     )
    71     complete: Optional[bool] = None
    72
    73
    74 class Address(BaseModel):
    75     street: Optional[str] = Field(None, example='437 Lytton')
    76     city: Optional[str] = Field(None, example='Palo Alto')
    77     state: Optional[str] = Field(None, example='CA')
    78     zip: Optional[str] = Field(None, example='94301')
    79
    80
    81 class Category(BaseModel):
    82     id: Optional[int] = Field(None, example=1)
    83     name: Optional[str] = Field(None, example='Dogs')
    84
    85
    86 class User(BaseModel):
    87     id: Optional[int] = Field(None, example=10)
    88     username: Optional[str] = Field(None, example='theUser')
    89     firstName: Optional[str] = Field(None, example='John')
    90     lastName: Optional[str] = Field(None, example='James')
    91     email: Optional[str] = Field(None, example='john@email.com')
    92     password: Optional[str] = Field(None, example='12345')
    93     phone: Optional[str] = Field(None, example='12345')
    94     userStatus: Optional[int] = Field(None, description='User Status', example=1)
    95
    96
    97 class Tag(BaseModel):
    98     id: Optional[int] = None
    99     name: Optional[str] = None
   100
   101
   102 class Status1(Enum):
   103     available = 'available'
   104     pending = 'pending'
   105     sold = 'sold'
   106
   107
   108 class Pet(BaseModel):
   109     id: Optional[int] = Field(None, example=10)
   110     name: str = Field(..., example='doggie')
   111     category: Optional[Category] = None
   112     photoUrls: List[str]
   113     tags: Optional[List[Tag]] = None
   114     status: Optional[Status1] = Field(None, description='pet status in the store')
   115
   116
   117 class ApiResponse(BaseModel):
   118     code: Optional[int] = None
   119     type: Optional[str] = None
   120     message: Optional[str] = None
   121
   122
   123 class Status2(Enum):
   124     available = 'available'
   125     pending = 'pending'
   126     sold = 'sold'
   127
   128
   129 class Status3(Enum):
   130     available = 'available'
   131     pending = 'pending'
   132     sold = 'sold'
   133
   134
   135 class StoreInventoryGetResponse(BaseModel):
   136     __root__: Optional[Dict[str, int]] = None
   137
   138
   139 class Customer(BaseModel):
   140     id: Optional[int] = Field(None, example=100000)
   141     username: Optional[str] = Field(None, example='fehguy')
   142     address: Optional[List[Address]] = None
 
 
 
★output/schemas.py
   143 # generated by datamodel-codegen:
   144 #   filename:  openapi.yaml
   145 #   timestamp: 2024-01-02T04:42:23+00:00
   146
   147 from __future__ import annotations
   148
   149 from datetime import datetime
   150 from enum import Enum
   151 from typing import List, Optional
   152
   153 from pydantic import BaseModel, Field
   154
   155
   156 class Status(Enum):
   157     placed = 'placed'
   158     approved = 'approved'
   159     delivered = 'delivered'
   160
   161
   162 class Order(BaseModel):
   163     id: Optional[int] = Field(None, example=10)
   164     petId: Optional[int] = Field(None, example=198772)
   165     quantity: Optional[int] = Field(None, example=7)
   166     shipDate: Optional[datetime] = None
   167     status: Optional[Status] = Field(
   168         None, description='Order Status', example='approved'
   169     )
   170     complete: Optional[bool] = None
   171
   172
   173 class Address(BaseModel):
   174     street: Optional[str] = Field(None, example='437 Lytton')
   175     city: Optional[str] = Field(None, example='Palo Alto')
   176     state: Optional[str] = Field(None, example='CA')
   177     zip: Optional[str] = Field(None, example='94301')
   178
   179
   180 class Category(BaseModel):
   181     id: Optional[int] = Field(None, example=1)
   182     name: Optional[str] = Field(None, example='Dogs')
   183
   184
   185 class User(BaseModel):
   186     id: Optional[int] = Field(None, example=10)
   187     username: Optional[str] = Field(None, example='theUser')
   188     firstName: Optional[str] = Field(None, example='John')
   189     lastName: Optional[str] = Field(None, example='James')
   190     email: Optional[str] = Field(None, example='john@email.com')
   191     password: Optional[str] = Field(None, example='12345')
   192     phone: Optional[str] = Field(None, example='12345')
   193     userStatus: Optional[int] = Field(None, description='User Status', example=1)
   194
   195
   196 class Tag(BaseModel):
   197     id: Optional[int] = None
   198     name: Optional[str] = None
   199
   200
   201 class Status1(Enum):
   202     available = 'available'
   203     pending = 'pending'
   204     sold = 'sold'
   205
   206
   207 class Pet(BaseModel):
   208     id: Optional[int] = Field(None, example=10)
   209     name: str = Field(..., example='doggie')
   210     category: Optional[Category] = None
   211     photoUrls: List[str]
   212     tags: Optional[List[Tag]] = None
   213     status: Optional[Status1] = Field(None, description='pet status in the store')
   214
   215
   216 class ApiResponse(BaseModel):
   217     code: Optional[int] = None
   218     type: Optional[str] = None
   219     message: Optional[str] = None
   220
   221
   222 class Customer(BaseModel):
   223     id: Optional[int] = Field(None, example=100000)
   224     username: Optional[str] = Field(None, example='fehguy')
   225     address: Optional[List[Address]] = None
 
 
 
★output/router/pet.py
     1 # generated by fastapi-codegen:
     2 #   filename:  openapi.yaml
     3 #   timestamp: 2024-01-02T04:42:03+00:00
     4
     5 from __future__ import annotations
     6
     7 from fastapi import APIRouter
     8
     9 from ..dependencies import *
    10
    11 router = APIRouter(tags=['pet'])
    12
    13
    14 @router.put('/pet', response_model=Pet, tags=['pet'])
    15 def update_pet(body: Pet) -> Pet:
    16     """
    17     Update an existing pet
    18     """
    19     pass
    20
    21
    22 @router.post('/pet', response_model=Pet, tags=['pet'])
    23 def add_pet(body: Pet) -> Pet:
    24     """
    25     Add a new pet to the store
    26     """
    27     pass
    28
    29
    30 @router.get('/pet/findByStatus', response_model=List[Pet], tags=['pet'])
    31 def find_pets_by_status(status: Optional[Status3] = 'available') -> List[Pet]:
    32     """
    33     Finds Pets by status
    34     """
    35     pass
    36
    37
    38 @router.get('/pet/findByTags', response_model=List[Pet], tags=['pet'])
    39 def find_pets_by_tags(tags: Optional[List[str]] = None) -> List[Pet]:
    40     """
    41     Finds Pets by tags
    42     """
    43     pass
    44
    45
    46 @router.get('/pet/{pet_id}', response_model=Pet, tags=['pet'])
    47 def get_pet_by_id(pet_id: int = Path(..., alias='petId')) -> Pet:
    48     """
    49     Find pet by ID
    50     """
    51     pass
    52
    53
    54 @router.post('/pet/{pet_id}', response_model=None, tags=['pet'])
    55 def update_pet_with_form(
    56     pet_id: int = Path(..., alias='petId'),
    57     name: Optional[str] = None,
    58     status: Optional[str] = None,
    59 ) -> None:
    60     """
    61     Updates a pet in the store with form data
    62     """
    63     pass
    64
    65
    66 @router.delete('/pet/{pet_id}', response_model=None, tags=['pet'])
    67 def delete_pet(
    68     api_key: Optional[str] = None, pet_id: int = Path(..., alias='petId')
    69 ) -> None:
    70     """
    71     Deletes a pet
    72     """
    73     pass
    74
    75
    76 @router.post('/pet/{pet_id}/uploadImage', response_model=ApiResponse, tags=['pet'])
    77 def upload_file(
    78     pet_id: int = Path(..., alias='petId'),
    79     additional_metadata: Optional[str] = Query(None, alias='additionalMetadata'),
    80     request: Request = ...,
    81 ) -> ApiResponse:
    82     """
    83     uploads an image
    84     """
    85     pass
 
 
 
★output/router/store.py
    86 # generated by fastapi-codegen:
    87 #   filename:  openapi.yaml
    88 #   timestamp: 2024-01-02T04:42:03+00:00
    89
    90 from __future__ import annotations
    91
    92 from fastapi import APIRouter
    93
    94 from ..dependencies import *
    95
    96 router = APIRouter(tags=['store'])
    97
    98
    99 @router.get(
   100     '/store/inventory', response_model=StoreInventoryGetResponse, tags=['store']
   101 )
   102 def get_inventory() -> StoreInventoryGetResponse:
   103     """
   104     Returns pet inventories by status
   105     """
   106     pass
   107
   108
   109 @router.post('/store/order', response_model=Order, tags=['store'])
   110 def place_order(body: Order = None) -> Order:
   111     """
   112     Place an order for a pet
   113     """
   114     pass
   115
   116
   117 @router.get('/store/order/{order_id}', response_model=Order, tags=['store'])
   118 def get_order_by_id(order_id: int = Path(..., alias='orderId')) -> Order:
   119     """
   120     Find purchase order by ID
   121     """
   122     pass
   123
   124
   125 @router.delete('/store/order/{order_id}', response_model=None, tags=['store'])
   126 def delete_order(order_id: int = Path(..., alias='orderId')) -> None:
   127     """
   128     Delete purchase order by ID
   129     """
   130     pass
 
 
 
★output/router/user.py
   131 # generated by fastapi-codegen:
   132 #   filename:  openapi.yaml
   133 #   timestamp: 2024-01-02T04:42:03+00:00
   134
   135 from __future__ import annotations
   136
   137 from fastapi import APIRouter
   138
   139 from ..dependencies import *
   140
   141 router = APIRouter(tags=['user'])
   142
   143
   144 @router.post(
   145     '/user', response_model=None, responses={'default': {'model': User}}, tags=['user']
   146 )
   147 def create_user(body: User = None) -> Union[None, User]:
   148     """
   149     Create user
   150     """
   151     pass
   152
   153
   154 @router.post('/user/createWithList', response_model=User, tags=['user'])
   155 def create_users_with_list_input(body: List[User] = None) -> User:
   156     """
   157     Creates list of users with given input array
   158     """
   159     pass
   160
   161
   162 @router.get('/user/login', response_model=str, tags=['user'])
   163 def login_user(username: Optional[str] = None, password: Optional[str] = None) -> str:
   164     """
   165     Logs user into the system
   166     """
   167     pass
   168
   169
   170 @router.get('/user/logout', response_model=None, tags=['user'])
   171 def logout_user() -> None:
   172     """
   173     Logs out current logged in user session
   174     """
   175     pass
   176
   177
   178 @router.get('/user/{username}', response_model=User, tags=['user'])
   179 def get_user_by_name(username: str) -> User:
   180     """
   181     Get user by user name
   182     """
   183     pass
   184
   185
   186 @router.put('/user/{username}', response_model=None, tags=['user'])
   187 def update_user(username: str, body: User = None) -> None:
   188     """
   189     Update user
   190     """
   191     pass
   192
   193
   194 @router.delete('/user/{username}', response_model=None, tags=['user'])
   195 def delete_user(username: str) -> None:
   196     """
   197     Delete user
   198     """
   199     pass

 

 

米国は会社とか雇用とか仕事とが、スポーツ感覚なのよね。健全な競争。だから失業しても、スポーツの試合に負けたのように、次いこう次!という雰囲気になる

米国は会社とか雇用とか仕事とが、スポーツ感覚なのよね。健全な競争。だから失業しても、スポーツの試合に負けたのように、次いこう次!という雰囲気になる

 

これが強い。

 

日本は転職が少なすぎてこのスピード感についていけてない

 


負債を就職氷河期世代に押し付けてきた

 

人口も多い無能バブル世代が、多額の退職金を得て逃げる前に


終身雇用と

 

整理解雇の4要件を撤廃と、

 

日銀法を改正して雇用の最大化という機能をもたせるべき。


そうすれば技術志向の社会に移行する

 

雇用流動性やジョブ型メンバーシップ型に触れて

 

日本はできない人をクビにできない。

 

今は会社の人というぜい肉多すぎ。