FastAPI學習-9. Swagger文件輸出請求示例example
阿新 • • 發佈:2022-03-04
前言
可以在 Swagger文件上看到請求示例example,使用Pydantic schema_extra屬性來實現。
schema_extra
使用 Config 和 schema_extra 為Pydantic模型宣告一個示例,如Pydantic 文件:定製 Schema 中所述:
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None class Config: schema_extra = { "example": { "name": "Foo", "description": "A very nice Item", "price": 35.4, "tax": 3.2, } } @app.put("/items/{item_id}") async def update_item(item_id: int, item: Item): results = {"item_id": item_id, "item": item} return results
這些額外的資訊將按原樣新增到輸出的JSON模式中。
Field 的附加引數
在 Field, Path, Query, Body 和其他你之後將會看到的工廠函式,你可以為JSON 模式宣告額外資訊,你也可以通過給工廠函式傳遞其他的任意引數來給JSON 模式宣告額外資訊,比如增加 example:
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel, Field app = FastAPI() class Item(BaseModel): name: str = Field(..., example="Foo") description: Optional[str] = Field(None, example="A very nice Item") price: float = Field(..., example=35.4) tax: Optional[float] = Field(None, example=3.2) @app.put("/items/{item_id}") async def update_item(item_id: int, item: Item): results = {"item_id": item_id, "item": item} return results
請記住,傳遞的那些額外引數不會新增任何驗證,只會添加註釋,用於文件的目的。
Body 額外引數
你可以通過傳遞額外資訊給 Field 同樣的方式操作Path, Query, Body等。
比如,你可以將請求體的一個 example 傳遞給 Body:
from typing import Optional from fastapi import Body, FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.put("/items/{item_id}") async def update_item( item_id: int, item: Item = Body( ..., example={ "name": "Foo", "description": "A very nice Item", "price": 35.4, "tax": 3.2, }, ), ): results = {"item_id": item_id, "item": item} return results
文件 UI 中的例子
使用上面的任何方法,它在 /docs 中看起來都是這樣的:
技術細節
關於 example 和 examples...
JSON Schema在最新的一個版本中定義了一個欄位 examples ,但是 OpenAPI 基於之前的一箇舊版JSON Schema,並沒有 examples.
所以 OpenAPI為了相似的目的定義了自己的 example (使用 example, 而不是 examples), 這也是文件 UI 所使用的 (使用 Swagger UI).
所以,雖然 example 不是JSON Schema的一部分,但它是OpenAPI的一部分,這將被文件UI使用。