10 FastAPI 的自动文档

FastAPI 是一个功能强大且易于使用的 Web 框架,它的最大亮点之一就是内置的 自动文档生成 功能。通过集成 Swagger UIReDoc,FastAPI 可以自动为我们的 API 生成交互式文档。这不仅使得开发者能够更快速地了解和测试 API,还能够为前端开发人员和其他使用者提供清晰、准确的接口说明。

本文将介绍如何使用 FastAPI 自动生成 API 文档,如何使用 Swagger UIReDoc 来查看和交互 API 文档,以及文档如何自动更新。

1. 快速入门:安装 FastAPI 和 Uvicorn

首先,如果你还没有安装 FastAPI 和 Uvicorn,请使用以下命令进行安装:


pip install fastapi uvicorn

然后,可以使用 Uvicorn 启动 FastAPI 应用:


uvicorn main:app --reload

在这个命令中:

  • main 是 Python 文件的名称(即 main.py)。
  • app 是 FastAPI 实例的变量名。

2. FastAPI 的自动文档

FastAPI 使用 OpenAPI 规范来自动生成 API 文档。OpenAPI 是一个标准化的接口描述语言,FastAPI 会根据定义的路由、请求参数、响应等自动生成接口文档。

2.1 使用 Swagger UI 查看文档

FastAPI 默认启用了 Swagger UI,它提供了一个交互式的用户界面,用于查看和测试 API。

假设我们有以下简单的 FastAPI 应用:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int, query: str = None):
    return {"item_id": item_id, "query": query}

启动应用后,访问 http://127.0.0.1:8000/docs 就可以看到 Swagger UI 的界面,其中包含了 GET /items/{item_id} 路由的详细信息。

2.1.1 Swagger UI 的特点
  • 交互式测试:你可以直接在文档界面上测试 API。只需点击一个路由,输入参数,然后点击 “Execute” 即可发送请求并查看响应。
  • 实时更新:当你更改 FastAPI 应用时,Swagger UI 会自动更新文档,反映新的路由和参数。
  • 自动生成:FastAPI 会自动根据 Python 函数的注解(如类型注解、默认值等)生成 API 文档,无需额外的注释或配置。

2.2 使用 ReDoc 查看文档

除了 Swagger UI,FastAPI 还内置了 ReDoc,它提供了另一种风格的 API 文档,适合那些更喜欢静态文档或需要生成 PDF 版本的用户。

访问 http://127.0.0.1:8000/redoc 即可看到 ReDoc 界面。

2.2.1 ReDoc 的特点
  • 清晰简洁的界面:ReDoc 的界面较为简洁,适合查看大规模的 API 文档。
  • 支持丰富的 OpenAPI 特性:ReDoc 提供了详细的 OpenAPI 规范支持,包括复杂的请求和响应结构、数据模型等。

2.3 自定义文档标题和描述

你可以在创建 FastAPI 应用时,使用 titledescriptionversion 等参数来自定义 API 文档的标题、描述和版本。

from fastapi import FastAPI

app = FastAPI(
    title="My API",
    description="This is a very simple API for demonstration.",
    version="1.0.0"
)

@app.get("/items/{item_id}")
async def read_item(item_id: int, query: str = None):
    return {"item_id": item_id, "query": query}

启动应用后,访问 http://127.0.0.1:8000/docs,你将看到自定义的文档标题和描述。

2.4 自动更新 API 文档

FastAPI 自动生成的 API 文档会根据应用代码的变化实时更新。以下是一些常见的更新内容:

  • 新增路由:当你添加新的路由时,Swagger UI 和 ReDoc 会立即反映出来。
  • 修改参数:当你修改路由的请求参数类型或描述时,文档会自动更新。
  • 更新响应格式:如果你更新了响应体或错误码,文档也会自动更新。

2.5 自定义 OpenAPI 文档

如果需要更多的定制化,你可以通过 openapi_schemaopenapi 属性修改 FastAPI 生成的 OpenAPI 文档。例如,可以添加额外的元数据、修改默认的响应状态码、定义统一的错误结构等。

from fastapi import FastAPI
from fastapi.openapi.models import OpenAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int, query: str = None):
    return {"item_id": item_id, "query": query}

# 自定义 OpenAPI 文档
@app.get("/custom_openapi")
async def custom_openapi():
    custom_openapi_schema = OpenAPI(
        title="Custom API",
        version="2.0.0",
        description="A custom API with modified OpenAPI schema.",
        routes=app.routes
    )
    return custom_openapi_schema

3. 通过 OpenAPI 文档与前端进行协作

由于 FastAPI 自动生成的 API 文档遵循 OpenAPI 标准,你可以轻松地与前端开发人员协作。前端开发人员可以通过 Swagger UI 或 ReDoc 来查看 API 接口,并根据文档进行开发。甚至他们可以直接从 API 文档中获取接口参数、返回值类型、示例请求等信息。

4. 集成第三方工具

除了内置的 Swagger UI 和 ReDoc,FastAPI 也支持与其他工具进行集成。通过配置 OpenAPI,开发者可以使用像 PostmanInsomnia 这样的工具来导入 FastAPI 生成的 OpenAPI 文档进行接口测试和调试。

例如,可以使用 Postman 导入 OpenAPI 文档:

  1. 打开 Postman。
  2. 在左侧菜单栏选择 Import,然后选择 Link
  3. 输入 FastAPI 提供的 OpenAPI JSON 地址(通常是 http://127.0.0.1:8000/openapi.json)。
  4. 点击 Continue,Postman 将导入 API 文档并生成接口请求模板。

FastAPI 提供了一个非常方便且强大的功能:自动生成 API 文档。通过内置的 Swagger UIReDoc,你可以轻松查看、测试和管理 API 接口。文档会自动根据代码的变化更新,这减少了手动编写文档的工作量。此外,FastAPI 还支持高度自定义 OpenAPI 文档,让开发者可以灵活配置 API 文档的内容。

借助 FastAPI 自动文档功能,开发者可以大大提升工作效率,更好地与前端开发人员协作,快速构建和维护 API。


这个博客草稿介绍了 FastAPI 的自动文档生成功能,以及如何使用 Swagger UIReDoc 查看和交互文档。你可以根据需求进一步扩展,介绍更复杂的自定义文档生成或集成其他工具的使用。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软AI研究团队推出LLaVA-Rad:轻量级开源基础模型,助力先进临床放射学报告生成

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

mysql8.0使用MHA实现高可用

一、MHA 介绍 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点&…

D3实现站点路线图demo分享

分享通过D3实现的站点路线分布图demo,后续会继续更新其他功能。 功能点 点位弹窗 效果图如下: 轨迹高亮 效果图如下: 添加路线箭头 箭头展示逻辑:根据高速路线最后两个点位,计算得出箭头的点位 效果图如下&#x…

【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )

文章目录 一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入 二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移5、段式存储 优缺点6、段式存储 与 页式存储 对比 三、逻辑地址 的 合法段地址…

物联网软件开发与应用方向应该怎样学习,学习哪些内容,就业方向是怎样?(文末领取整套学习视频,课件)物联网硬件开发与嵌入式系统

随着物联网技术的飞速发展,物联网软件开发与应用方向成为了众多开发者关注的焦点。那么,如何在这个领域中脱颖而出呢?本文将为你提供一份详细的学习指南,帮助你从零开始,逐步掌握物联网软件开发与应用的核心技能。 一…

Linux——基础命令1

$:普通用户 #:超级用户 cd 切换目录 cd 目录 (进入目录) cd ../ (返回上一级目录) cd ~ (切换到当前用户的家目录) cd - (返回上次目录) pwd 输出当前目录…

OpenFeign远程调用返回的是List<T>类型的数据

在使用 OpenFeign 进行远程调用时,如果接口返回的是 List 类型的数据,可以通过以下方式处理: 直接定义返回类型为List Feign 默认支持 JSON 序列化/反序列化,如果服务端返回的是 List的JSON格式数据,可以直接在 Feig…

向量数据库简单对比

文章目录 一、Chroma二、Pinecone/腾讯云VectorDB/VikingDB三、redis四、Elasticsearch五、Milvus六、Qdrant七、Weaviate八、Faiss 一、Chroma 官方地址: https://www.trychroma.com/优点 ①简单,非常简单构建服务。 ②此外,Chroma还具有自…

字符指针、数组指针和函数指针

1. 字符指针变量 1.1 简单例子 字符指针 char* 在C语言中主要由两种用法: 1.用于存放一个字符变量的地址。 2.用字符指针接收一个字符串。 这里并不是将整个字符串的地址存入 pstr 指针,指针变量 pstr 中存放的是常量字符串的首字符 h 的地址。 以一个…

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 作业控制相关概念作业状态(一般指后…

JS宏进阶:XMLHttpRequest对象

一、概述 XMLHttpRequest简称XHR,它是一个可以在JavaScript中使用的对象,用于在后台与服务器交换数据,实现页面的局部更新,而无需重新加载整个页面,也是Ajax(Asynchronous JavaScript and XML)…

怎么查看电脑显存大小(查看电脑配置)

这里提供一个简单的方法查看 winr打开cmd 终端输入dxdiag进入DirectX 点击显示查看设备的显示内存(VRAM) 用这个方法查看电脑配置和显存是比较方便的 dxdiag功能 Dxdiag是Windows的DirectX诊断工具,其主要作用包括但不限于以下几点&#…

优惠券平台(一):基于责任链模式创建优惠券模板

前景概要 系统的主要实现是优惠券的相关业务,所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能,这里先通过模拟的形式代替。后续如果需要后管展示,会重构该代码 UserInfoDTO userInfoDTO new…

【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化

scikit-learn的Scaler数据归一化 一、摘要二、训练数据集和测试数据集的归一化处理原则三、scikit-learn中的Scalar类及示例四、自定义StandardScaler类进行数据归一化处理五、小结 一、摘要 本文主要介绍了scikit-learn中Scaler的使用方法,特别强调了数据归一化在…

机器学习中过拟合和欠拟合问题处理方法总结

目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合(Underfitting)3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…

ABP框架9——自定义拦截器的实现与使用

一、AOP编程 AOP定义:面向切片编程,着重强调功能,将功能从业务逻辑分离出来。AOP使用场景:处理通用的、与业务逻辑无关的功能(如日志记录、性能监控、事务管理等)拦截器:拦截方法调用并添加额外的行为,比如…

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是,本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为,包括但不限于在各类游戏中实施作弊等违规操作。若因违…

示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

记录IMX6ULL开发板上移植SQLite3并运行Qt程序

文章目录 概要移植SQLite3Qt程序部署实验现象 概要 基于上一章对使用Qt运行对应的实验实例来完成对用户使用ui界面完成对SQLite数据库的增删改查等操作。本文旨在对上一句节的Qt程序部署到IMX6ULL开发板,并且完成对SQLite数据库在IMX6ULL开发板上的移植。 移植SQ…

达梦数据库(DM)线程管理

目录标题 达梦数据库(DM)线程管理笔记一、DM 线程架构概述二、DM 主要线程类型及功能(一)监听线程(二)工作线程(三)IO 线程(四)调度线程(五&#…