FastAPI 第四课 -- 交互式 API 文档

ops/2024/12/22 18:13:31/

目录

一. API 文档

二. 升级实例


一. API 文档

FastAPI 提供了内置的交互式 API 文档,使开发者能够轻松了解和测试 API 的各个端点。

这个文档是自动生成的,基于 OpenAPI 规范,支持 Swagger UI 和 ReDoc 两种交互式界面。

通过 FastAPI 的交互式 API 文档,开发者能够更轻松地理解和使用 API,提高开发效率

在运行 FastAPI 应用时,Uvicorn 同时启动了交互式 API 文档服务。

默认情况下,你可以通过访问 http://127.0.0.1:8000/docs 来打开 Swagger UI 风格的文档:

Swagger UI 提供了一个直观的用户界面,用于浏览 API 的各个端点、查看请求和响应的结构,并支持直接在文档中进行 API 请求测试。通过 Swagger UI,你可以轻松理解每个路由操作的输入参数、输出格式和请求示例。

或者通过 http://127.0.0.1:8000/redoc 来打开 ReDoc 风格的文档。

ReDoc 是另一种交互式文档界面,具有清晰简洁的外观。它使得开发者能够以可读性强的方式查看 API 的描述、请求和响应。与 Swagger UI 不同,ReDoc 的设计强调文档的可视化和用户体验。

交互式文档的优势

  • 实时更新: 交互式文档会实时更新,反映出应用代码的最新更改。
  • 自动验证: 输入参数的类型和格式会得到自动验证,降低了错误的可能性。
  • 便于测试: 可以直接在文档中进行 API 请求测试,避免使用其他工具。

二. 升级实例

接下来我们修改 main.py 文件来从 PUT 请求中接收请求体。

我们借助 Pydantic 来使用标准的 Python 类型声明请求体。

from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strprice: floatis_offer: Union[bool, None] = None@app.get("/")
def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):return {"item_name": item.name, "item_id": item_id}

修改完代码后,我们不需要重启服务器,因为服务器将会自动重载,因为在前面的章节中 uvicorn 命令添加了 --reload 选项。

这时候我们再访问 http://127.0.0.1:8000/docs,交互式 API 文档将会自动更新,并加入新的请求体:

点击「Try it out」按钮,之后你可以填写参数并直接调用 API:

然后点击「Execute」按钮,用户界面将会和 API 进行通信,发送参数,获取结果并在屏幕上展示:

另外,访问 http://127.0.0.1:8000/redoc,可选文档同样会体现新加入的请求参数和请求体:


http://www.ppmy.cn/ops/117257.html

相关文章

7款国内AI搜索引擎大全网站

与传统搜索引擎相比,AI搜索引擎利用先进的自然语言处理、机器学习和深度学习技术,提供更加精准和个性化的搜索服务。小编就来和大家分享国内免费的AI搜索引擎网站,方便大家体验使用。 AI搜索引擎网站大全:https://www.bgrdh.com/f…

tornado

Tornado通过使用非阻塞网络I/O,可以扩展到数以万计的开放链接,非常适合 长时间轮询,WebSockets和其他需要与每个用户建立长期连接的应用程序。 特点 注重性能优越,速度快解决高并发异步非阻塞websockets 长连接内嵌了HTTP服务器…

桶排序和计数排序(非比较排序算法)

桶排序 桶排序是一种基于分配的排序算法,特别适合用来排序均匀分布的数据。它的基本思想是将输入的数据分到有限数量的桶里,然后对每个桶内的数据分别进行排序,最后再将各个桶内的数据合并得到最终的排序结果。(通常用于浮点数,因…

3.javaweb-Servlet与过滤器

javaweb-Servlet与过滤器 文章目录 javaweb-Servlet与过滤器一、Servlet:server applet二、Servlet做了什么?三、Servlet是什么?四、jsp与Servlet关系五、Servlet API1.主要Servlet API介绍2.如何创建Servlet3.Servlet中主要方法4.ServletReq…

零成本玩转企业微信!2024年邮箱功能新升级,速来get√

在这个网络时代,公司聊天和管理得快不快,对公司能不能赢很关键。企业微信是腾讯给公司做的聊天和办公工具,因为功能多、用着方便,很多公司都喜欢用。不过,新用企业微信的公司最想知道的是:用这个要不要花钱…

Spring Boot 点餐系统:高效餐饮服务

第二章关键技术的研究 2.1相关技术 网上点餐系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言,易于学习,实用且面向用户。全球超过35%的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统,因为它的…

近万字深入讲解iOS常见锁及线程安全

什么是锁? 在程序中,当多个任务(或线程)同时访问同一个资源时,比如多个操作同时修改一份数据,可能会导致数据不一致。这时候,我们需要“锁”来确保同一时间只有一个任务能够操作这个数据&#…

ELFK日志分析平台,架构和通信

整个架构,加上跳板机,总共12台机器 技术方案: 1. 配置nfs服务器,为web集群提供共享网络文件系统 # 部署 NFS 服务 [rootnfs ~]# dnf install -y nfs-utils [rootnfs ~]# vim /etc/exports /var/webroot 192.168.1.0/24(rw,…