OpenAPI仕様をゼロから記述するのは、特にAPIが既に稼働している場合には多くの時間を要します。多くのチームは、ドキュメントがほとんど、あるいは全くないプロジェクトを引き継いだり、開発初期に急いで構築されたAPIを扱ったりしています。このような場合、ドキュメントを作成する最も実用的な方法は、既存のAPIリクエストから直接OpenAPI仕様を生成することです。
このガイドでは、このアプローチが機能する理由、役立つツール、そして実際のリクエストをチームが信頼できるクリーンで再利用可能なOpenAPI仕様に変換する方法を説明します。
方法1: 「コードファースト」アプローチ
この方法は、バックエンドアプリケーションコードに直接アノテーションやライブラリを追加できる場合に機能します。
仕組み
Webフレームワークにライブラリをインストールし、それがコード(ルート、コントローラー、モデル)を検査し、リアルタイムでOpenAPI仕様を生成します。
人気のあるライブラリ:
- Node.js (Express):
swagger-jsdocまたはtsoa(TypeScript OpenAPI) - Python (FastAPI/Flask): FastAPIにはこれが組み込まれています! Flaskでは
flasggerまたはflask-restxを使用できます。 - Java (Spring Boot):
springdoc-openapi - .NET:
Swashbuckle
FastAPI (Python) の例:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
"""
Create a new item in the database.
- **name**: The item's name
- **price**: The item's price in USD
"""
return item
# このコードは、/docs または /openapi.json で完全なOpenAPI仕様を自動生成します
長所:
- 常に正確: 仕様は実行中のコードから直接派生します。
- 低いメンテナンスコスト: コードを更新すると、仕様も自動的に更新されます。
短所:
- コードへのアクセスが必要: 制御できないサードパーティ製やレガシーAPIには使用できません。
- コードが煩雑になる可能性: 大規模なOpenAPIアノテーションは、ビジネスロジックを読みにくくする可能性があります。
方法2: 「トラフィック分析」アプローチ
これは賢い「外部からの」アプローチです。クライアントとAPI間の実際のHTTPトラフィックをキャプチャし、それを分析して仕様を推測します。
仕組み
プロキシまたはネットワークスニファとして機能するツールを使用します。すべてのAPIトラフィックはそれを経由します。ツールはリクエストとレスポンス(URL、メソッド、ヘッダー、ボディ)を分析し、APIのモデルを構築します。
人気のあるツール:
- Akita Software: APIトラフィックを自動的に監視し、仕様を作成・監視します。
- HARファイルの作成: ブラウザの開発者ツール(ネットワークタブ)を使用して、APIとのセッションを記録し、HAR (HTTP Archive) ファイルとしてエクスポートできます。一部のツールはこれをOpenAPIに変換します。
プロセス:
- アプリケーションまたはクライアントを構成し、プロキシツールを介してトラフィックをルーティングします。
- 主要なAPIワークフロー(ログイン、データ作成、データ取得など)を実行します。
- ツールがパターンを観察し、暫定的なOpenAPI仕様を生成します。
長所:
- レガシー/ブラックボックスAPIに最適: コードの変更やサーバーからの協力なしに機能します。
- 実際の使用状況に基づく: 実際に使用されているエンドポイントとデータ形式をキャプチャします。
短所:
- 不完全な可能性: 記録中に偶然呼び出したエンドポイントの仕様のみを生成します。
- ニュアンスを見逃す可能性: すべての制約、オプションフィールド、またはエラー応答を正しく推測できない場合があります。
- 設定のオーバーヘッド: ネットワークトラフィックの傍受が必要であり、一部の環境では難しい場合があります。
方法3: 「リクエストコレクション」アプローチ

これは、開発者やチームにとって最も実用的で効率的な方法であることがよくあります。リクエストを送信するだけでなく、API設計も理解する高度なAPIクライアントを使用します。リクエストのコレクションを構築し、ツールがそれらをクリーンなOpenAPI仕様として構造化およびエクスポートするのを支援します。
これは、Apidog の真価が発揮されるところです。このワークフローのために構築されています。
Apidogでの仕組み
1. 通常通りリクエストを送信する: ワークフローを変更する必要はありません。Apidogを使用して既存のAPIエンドポイントをテストおよびデバッグします。GET、POST、PUT、DELETE リクエストを送信すると、Apidogはすべての詳細をキャプチャします。
2. Apidogにモデルを構築させる: 舞台裏で、Apidogは作業中にAPIの構造を理解し始めます。エンドポイント、パラメーター、リクエストボディ、レスポンススキーマを認識します。
3. ドキュメントに整理する: ApidogはリクエストをリアルタイムでAPIドキュメントに変換できます。 あなたのアドホックなリクエストは、ツール内で構造化されたナビゲーション可能なAPIドキュメントページになります。説明を追加したり、エンドポイントをフォルダーにグループ化したり、自動推論された詳細を整理したりできます。
4. 仕様をエクスポートする: コレクションが正確で適切に記述されたら、エクスポートします。そして、ユーザーはOpenAPI仕様を標準のYAMLまたはJSON形式でワンクリックでエクスポートできます。この仕様は、Swagger UIで使用したり、他のツールにインポートしたり、リポジトリにコミットしたりする準備ができています。
長所:
- 自然なワークフロー: 開発者が既に行っている作業(APIのテスト)に適合します。
- 高い制御性: コレクションを構築しながら、仕様をキュレートし、洗練させることができます。
- 包括的: すべてのエンドポイント、エラー応答、認証方法がドキュメント化されていることを確実にできます。
- 協調的: チームは同じリクエストコレクションで共同作業できます。
短所:
- 手動作業が必要: すべてのエンドポイントをカバーしていることを確認する必要があります。トラフィックからの完全な自動生成ではありません。
方法4: 手動作成アプローチ
時には、Swagger Editor や Stoplight Studio のようなエディターで、手動で仕様を構築する必要があります。これは、上記のメソッドと併用されることがよくあります。
- リクエストコレクションを参照として使用する: Postmanコレクション、cURLコマンド、またはApidogプロジェクトをセカンドスクリーンで開いておきます。
- 仕様を段階的に構築する: 参照内の各エンドポイントについて、手動でOpenAPI YAML/JSONに変換します。これにより、各パラメーターとレスポンスについて深く考えることになります。
- 例で検証する: エディターのプレビューを使用して、仕様が実際のAPIの動作と一致していることを確認します。
長所:
- 深い理解: 仕様のあらゆる詳細を把握できます。
- 最高の精度: 自動化ツールでは見逃されがちな微妙な点もドキュメント化できます。
短所:
- 非常に時間がかかる: 最も手間のかかる方法です。
- エラーが発生しやすい: タイプミスをしたり、エンドポイントを忘れたりしやすいです。
リクエストからOpenAPI仕様を生成するためのベストプラクティス
どの方法を選択するかにかかわらず、以下の原則に従ってください:
- 小さく始める: 1つのコアエンドポイント(例:
GET /users)を選びます。それを完全に生成またはドキュメント化してから、拡張していきます。 - 早期かつ頻繁に検証する: OpenAPI仕様を使用して、すぐにモックサーバーを生成します。それが実際のAPIのように動作するか確認します。これにより、不一致を迅速に発見できます。
- 繰り返し改善する: 最初に生成された仕様は粗いでしょう。それを下書きとして扱います。説明や例を追加し、スキーマ定義を厳密にします。
- エラー応答を含める: これは見落とされがちです。仕様に4xxおよび5xxのエラー応答形式が記述されていることを確認してください。
- 認証を忘れない: APIがどのように保護されているか(APIキー、OAuth2など)を
securitySchemesセクションに記述してください。
結論: あなたの設計図が待っています
既存のリクエストからOpenAPI仕様を生成することは、単に可能であるだけでなく、成熟したAPIプロジェクトに秩序をもたらすための実用的な必要性です。コードファーストのライブラリ、トラフィック監視ツール、またはApidogのような強力なAPIクライアントのいずれを選択するにしても、明確性、自動化、およびコラボレーションに投資していることになります。
選択するメソッドは、コードベースの制御、時間の制約、チームのワークフローなど、あなたの状況によって異なります。しかし、目標は同じです。それは、リクエストログ、cURLコマンド、および暗黙的な知識に内在する情報を、APIを前進させるための明示的で機械可読な契約に変換することです。
APIの複雑さを闇の中に放置するのをやめましょう。既にあるリクエストから始め、適切なツールを使用し、その不可欠なOpenAPI設計図を構築しましょう。未来のあなた自身と、あなたのAPIを使用する必要があるすべての人々が感謝するでしょう。
