OpenAPI 网络钩子¶
有时,您可能希望告知您的 API **用户**,您的应用程序可能会使用某些数据调用*他们的*应用程序(发送请求),通常是为了**通知**某种类型的**事件**。
这意味着,您的用户不再是向您的 API 发送请求的正常过程,而是**您的 API**(或您的应用程序)可以**向他们的系统发送请求**(向他们的 API、他们的应用程序)。
这通常被称为**网络钩子**。
网络钩子步骤¶
通常,这个过程是**您在代码中定义**您将发送的消息,即**请求体**。
您还需要以某种方式定义您的应用程序将在哪些**时刻**发送这些请求或事件。
而**您的用户**则通过某种方式(例如在某个 Web 面板中)定义您的应用程序应将这些请求发送到哪个 **URL**。
所有关于如何注册网络钩子 URL 以及实际发送这些请求的代码**逻辑**都由您决定。您可以按照自己的意愿在**您的代码中**编写。
使用 FastAPI 和 OpenAPI 记录网络钩子¶
使用 **FastAPI** 和 OpenAPI,您可以定义这些网络钩子的名称、您的应用程序可以发送的 HTTP 操作类型(例如 POST
、PUT
等)以及您的应用程序将发送的请求**体**。
这可以大大方便您的用户**实现他们的 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。
您将看到您的文档包含正常的*路径操作*,现在还包含一些**网络钩子**