fastapi/docs/ja/docs/advanced/openapi-webhooks.md

3.6 KiB
Raw Blame History

OpenAPI の Webhook

アプリがある種のイベント通知するために、データ付きで相手のアプリリクエスト送信を呼び出す可能性があることを、API のユーザーに伝えたい場合があります。

これは、通常のようにユーザーがあなたの API にリクエストを送るのではなく、あなたの APIあなたのアプリ相手のシステム(相手の API、アプリにリクエストを送る、ということです。

これは一般にWebhookと呼ばれます。

Webhook の手順

通常の流れとして、まずあなたのコード内で、送信するメッセージ、すなわちリクエストの本文(ボディ)定義します。

加えて、アプリがそれらのリクエスト(イベント)を送信するタイミングも何らかの形で定義します。

そしてユーザーは、アプリがそのリクエストを送るべきURLを(たとえばどこかの Web ダッシュボードで)定義します。

Webhook の URL を登録する方法や実際にリクエストを送るコードなど、これらのロジックはすべてあなた次第です。あなた自身のコードで好きなように実装します。

FastAPI と OpenAPI による Webhook のドキュメント化

FastAPI と OpenAPI を使うと、Webhook の名前、アプリが送信できる HTTP の操作(例: POST, PUT など)、アプリが送るリクエストのボディを定義できます。

これにより、ユーザーがあなたの Webhook リクエストを受け取るためのAPI を実装するのが大幅に簡単になります。場合によっては、ユーザーが自分たちの API コードを自動生成できるかもしれません。

/// info | 情報

Webhook は OpenAPI 3.1.0 以上で利用可能で、FastAPI 0.99.0 以上が対応しています。

///

Webhook を持つアプリ

FastAPI アプリケーションを作成すると、webhooks という属性があり、ここで path operations と同様に(例: @app.webhooks.post()webhook を定義できます。

{* ../../docs_src/openapi_webhooks/tutorial001_py310.py hl[9:12,15:20] *}

定義した webhook は OpenAPI スキーマおよび自動生成される ドキュメント UI に反映されます。

/// info | 情報

app.webhooks オブジェクトは実際には単なる APIRouter で、複数ファイルでアプリを構成する際に使うものと同じ型です。

///

Webhook では(/items/ のような)パスを宣言しているわけではない点に注意してください。ここで渡す文字列は webhook の識別子(イベント名)です。たとえば @app.webhooks.post("new-subscription") での webhook 名は new-subscription です。

これは、ユーザーが実際に Webhook リクエストを受け取りたいURL パスを、別の方法(例: Web ダッシュボード)で定義することを想定しているためです。

ドキュメントの確認

アプリを起動し、http://127.0.0.1:8000/docs にアクセスします。

ドキュメントには通常の path operations に加えて、webhooks も表示されます: