当前位置: 首页 > article >正文

三周精通FastAPI:30 API、标签元数据和文档 URL

官方文档:https://fastapi.tiangolo.com/zh/tutorial/metadata/

API元数据和文档 URL¶

你可以在 FastAPI 应用程序中自定义多个元数据配置。

API 元数据¶

你可以在设置 OpenAPI 规范和自动 API 文档 UI 中使用的以下字段:

参数类型描述
titlestrAPI 的标题。
summarystrAPI 的简短摘要。 自 OpenAPI 3.1.0、FastAPI 0.99.0 起可用。.
descriptionstrAPI 的简短描述。可以使用Markdown。
versionstringAPI 的版本。这是您自己的应用程序的版本,而不是 OpenAPI 的版本。例如 2.5.0 。
terms_of_servicestrAPI 服务条款的 URL。如果提供,则必须是 URL。
contactdict公开的 API 的联系信息。它可以包含多个字段。

contact 字段

license_infodict公开的 API 的许可证信息。它可以包含多个字段。

license_info 字段

你可以按如下方式设置它们:

from fastapi import FastAPI

description = """
ChimichangApp API helps you do awesome stuff. 🚀

## Items

You can **read items**.

## Users

You will be able to:

* **Create users** (_not implemented_).
* **Read users** (_not implemented_).
"""

app = FastAPI(
    title="ChimichangApp",
    description=description,
    summary="Deadpool's favorite app. Nuff said.",
    version="0.0.1",
    terms_of_service="http://example.com/terms/",
    contact={
        "name": "Deadpoolio the Amazing",
        "url": "http://x-force.example.com/contact/",
        "email": "dp@x-force.example.com",
    },
    license_info={
        "name": "Apache 2.0",
        "url": "https://www.apache.org/licenses/LICENSE-2.0.html",
    },
)


@app.get("/items/")
async def read_items():
    return [{"name": "Katana"}]

Tip

您可以在 description 字段中编写 Markdown,它将在输出中呈现。

通过这样设置,自动 API 文档看起来会像:

标签元数据¶

创建标签元数据¶

让我们在带有标签的示例中为 users 和 items 试一下。创建标签元数据并把它传递给 openapi_tags 参数:

from fastapi import FastAPI

tags_metadata = [
    {
        "name": "users",
        "description": "Operations with users. The **login** logic is also here.",
    },
    {
        "name": "items",
        "description": "Manage items. So _fancy_ they have their own docs.",
        "externalDocs": {
            "description": "Items external docs",
            "url": "https://fastapi.tiangolo.com/",
        },
    },
]

app = FastAPI(openapi_tags=tags_metadata)


@app.get("/users/", tags=["users"])
async def get_users():
    return [{"name": "Harry"}, {"name": "Ron"}]


@app.get("/items/", tags=["items"])
async def get_items():
    return [{"name": "wand"}, {"name": "flying broom"}]

注意你可以在描述内使用 Markdown,例如「login」会显示为粗体(login)以及「fancy」会显示为斜体(fancy)。

"提示"

不必为你使用的所有标签都添加元数据。

使用你的标签¶

将 tags 参数和路径操作(以及 APIRouter)一起使用,将其分配给不同的标签:

@app.get("/users/", tags=["users"])
async def get_users():
    return [{"name": "Harry"}, {"name": "Ron"}]


@app.get("/items/", tags=["items"])
async def get_items():
    return [{"name": "wand"}, {"name": "flying broom"}]

"信息"

关于标签的信息路径操作配置。

查看文档¶

如果你现在查看文档,它们会显示所有附加的元数据:

标签顺序¶

每个标签元数据字典的顺序也定义了在文档用户界面显示的顺序。

例如按照字母顺序,即使 users 排在 items 之后,它也会显示在前面,因为我们将它的元数据添加为列表内的第一个字典。

OpenAPI URL¶

默认情况下,OpenAPI 模式服务于 /openapi.json

但是你可以通过参数 openapi_url 对其进行配置。例如,将其设置为服务于 /api/v1/openapi.json

from fastapi import FastAPI

app = FastAPI(openapi_url="/api/v1/openapi.json")


@app.get("/items/")
async def read_items():
    return [{"name": "Foo"}]

如果你想完全禁用 OpenAPI 模式,可以将其设置为 openapi_url=None,这样也会禁用使用它的文档用户界面。

文档 URLs¶

你可以配置两个文档用户界面,包括:

  • Swagger UI:服务于 /docs
    • 可以使用参数 docs_url 设置它的 URL。
    • 可以通过设置 docs_url=None 禁用它。
  • ReDoc:服务于 /redoc
    • 可以使用参数 redoc_url 设置它的 URL。
    • 可以通过设置 redoc_url=None 禁用它。

例如,设置 Swagger UI 服务于 /documentation 并禁用 ReDoc:

from fastapi import FastAPI

app = FastAPI(docs_url="/documentation", redoc_url=None)


@app.get("/items/")
async def read_items():
    return [{"name": "Foo"}]

实践

api元数据

将源码写入apimeta.py文件,启动服务:

uvicorn apimeta:app --reload

 查看文档http://127.0.0.1:8000/docs,它们会显示说明文档:

  

标签元数据

将源码写入labelmeta.py文件,启动服务

uvicorn labelmeta:app --reload

查看文档http://127.0.0.1:8000/docs,它们会显示所有附加的元数据: 

OpenAPI URL

源码文件写入openapi.py文件,启动服务:

uvicorn openapi:app --reload

打开http://127.0.0.1:8000/docs

会发现openapi.json的路径变成:/api/v1/openapi.json 

点击http://127.0.0.1:8000/api/v1/openapi.json

返回信息:

{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/items/":{"get":{"summary":"Read Items","operationId":"read_items_items__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}}}

http://www.kler.cn/a/384565.html

相关文章:

  • 计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践
  • 【Linux内存泄漏】自创pamp 内存快照比对定位内存泄漏【2024-11-07】
  • 一文了解git TAG
  • HT32201 2x15W+30W免电感2.1声道D类音频功放
  • uniapp中使用原生ajax上传文件并携带其他数据,实时展示上传进度
  • leetcode:杨辉三角
  • 大语言模型训练的全过程:预训练、微调、RLHF
  • Axure设计之左右滚动组件教程(动态面板)
  • ArcGIS Pro SDK (二十三)实时要素类
  • windows、linux安装jmeter及设置中文显示
  • Oracle 23AI创建示例库
  • idea | 搭建 SpringBoot 项目之配置 Maven
  • 第十五届蓝桥杯C/C++B组题解——数字接龙
  • 线性表之链表详解
  • Chrome与火狐哪个浏览器的隐私追踪功能更好
  • 实用篇:简单RTC时钟使用手册!
  • 跨境独立站新手,如何用DuoPlus云手机破局海外社媒引流?
  • C语言 | Leetcode C语言题解之第542题01矩阵
  • 正则表达式在Kotlin中的应用:提取图片链接
  • Istio Gateway发布服务
  • 一文了解Android的Doze模式
  • 前端开发设计模式——原型模式
  • Linux文件系统详解
  • 【Axure高保真原型】视频列表播放器
  • 计算机网络-以太网小结
  • Hive中各种Join的实现