跳至内容

OpenAPI Webhooks

在某些情况下,您希望告诉 API 用户您的应用程序可以调用他们的应用程序 (发送请求),通常是为了通知某种类型的事件

这意味着,与用户向您的 API 发送请求的正常过程相反,是您的 API (或您的应用程序) 向他们的系统发送请求 (向他们的 API、他们的应用程序)。

这通常称为webhook

Webhooks 步骤

此过程通常是您在代码中定义要发送的消息,即请求主体

您还以某种方式定义应用程序何时发送这些请求或事件。

您的用户则以某种方式 (例如,在某个 Web 仪表板中) 定义应用程序应发送这些请求的URL

关于如何注册 webhooks 的 URL 以及实际发送这些请求的代码的所有逻辑都由您决定。您可以按照自己想要的方式在自己的代码中编写它。

使用 FastAPI 和 OpenAPI 文档化 webhooks

使用 FastAPI 和 OpenAPI,您可以定义这些 webhooks 的名称、应用程序可以发送的 HTTP 操作类型 (例如 POSTPUT 等) 以及应用程序将发送的请求主体

这可以使您的用户更轻松地实施他们的 API 来接收您的webhook 请求,他们甚至可以自动生成一些自己的 API 代码。

信息

Webhooks 在 OpenAPI 3.1.0 及更高版本中可用,受 FastAPI 0.99.0 及更高版本支持。

具有 webhooks 的应用程序

创建 FastAPI 应用程序时,有一个 webhooks 属性可用于定义webhooks,就像定义路径操作一样,例如使用 @app.webhooks.post()

from datetime import datetime

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Subscription(BaseModel):
    username: str
    monthly_fee: float
    start_date: datetime


@app.webhooks.post("new-subscription")
def new_subscription(body: Subscription):
    """
    When a new user subscribes to your service we'll send you a POST request with this
    data to the URL that you register for the event `new-subscription` in the dashboard.
    """


@app.get("/users/")
def read_users():
    return ["Rick", "Morty"]

您定义的 webhooks 最终会出现在 OpenAPI 架构和自动文档 UI 中。

信息

app.webhooks 对象实际上只是一个 APIRouter,与您在使用多个文件构建应用程序时使用的类型相同。

请注意,使用 webhooks,您实际上并没有声明路径 (例如 /items/),您传递的文本只是一个 webhook 的标识符 (事件的名称),例如在 @app.webhooks.post("new-subscription") 中,webhook 名称是 new-subscription

这是因为预计您的用户会以其他方式 (例如,Web 仪表板) 定义他们希望接收 webhook 请求的实际URL 路径

检查文档

现在您可以启动您的应用程序并访问 http://127.0.0.1:8000/docs

您将看到您的文档中包含正常的路径操作,现在还包含一些webhooks