跳到内容

OpenAPI 网络钩子

有时,您可能希望告知您的 API **用户**,您的应用程序可能会使用某些数据调用*他们的*应用程序(发送请求),通常是为了**通知**某种类型的**事件**。

这意味着,您的用户不再是向您的 API 发送请求的正常过程,而是**您的 API**(或您的应用程序)可以**向他们的系统发送请求**(向他们的 API、他们的应用程序)。

这通常被称为**网络钩子**。

网络钩子步骤

通常,这个过程是**您在代码中定义**您将发送的消息,即**请求体**。

您还需要以某种方式定义您的应用程序将在哪些**时刻**发送这些请求或事件。

而**您的用户**则通过某种方式(例如在某个 Web 面板中)定义您的应用程序应将这些请求发送到哪个 **URL**。

所有关于如何注册网络钩子 URL 以及实际发送这些请求的代码**逻辑**都由您决定。您可以按照自己的意愿在**您的代码中**编写。

使用 FastAPI 和 OpenAPI 记录网络钩子

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

这可以大大方便您的用户**实现他们的 API** 以接收您的**网络钩子**请求,他们甚至可能能够自动生成部分自己的 API 代码。

信息

网络钩子在 OpenAPI 3.1.0 及更高版本中可用,并由 FastAPI 0.99.0 及更高版本支持。

一个带有网络钩子的应用程序

当您创建一个 **FastAPI** 应用程序时,有一个 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"]

您定义的网络钩子将出现在 **OpenAPI** 模式和自动生成的**文档 UI** 中。

信息

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

请注意,对于网络钩子,您实际上没有声明*路径*(例如 /items/),您在那里传递的文本只是网络钩子的**标识符**(事件的名称),例如在 @app.webhooks.post("new-subscription") 中,网络钩子名称是 new-subscription

这是因为预期**您的用户**会以其他方式(例如 Web 面板)定义他们希望接收网络钩子请求的实际 **URL 路径**。

检查文档

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

您将看到您的文档包含正常的*路径操作*,现在还包含一些**网络钩子**