讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么用Python构建RESTful API并自动生成Swagger文档?

云墨吖_8096

云墨吖_8096

发布时间:2026-09-13 08:28:19

|

317人浏览过

|

来源于php中文网

原创

FastAPI是当前最直接、最省错的方案——它原生支持Pydantic类型注解,零配置自动生成OpenAPI文档;Flask和Django REST Framework需额外配置schema与视图映射,易脱节。

怎么用python构建restful api并自动生成swagger文档?

FastAPI 是当前最直接、最省错的方案——它原生支持 Pydantic 模型驱动的类型注解,自动生成 OpenAPI(Swagger UI)文档几乎是零配置。

为什么不用 Flask + flask-swagger-ui 或 Django REST Framework?

Flask 需手动写 schema 或依赖 flask-apispec 等第三方库,字段校验和文档同步极易脱节;Django REST Framework 的 drf-spectacular 虽成熟,但需额外配置序列化器与视图映射。而 FastAPI 把类型提示直接当契约用:

  • strintOptionalList[User] 全部自动转成 OpenAPI schema
  • QueryPathBody 等依赖注入函数明确标注参数位置和约束
  • 启动服务后,/docs/redoc 开箱即用,不需额外路由或模板

一个能跑通的最小 FastAPI 示例

新建 main.py,内容如下:

from fastapi import FastAPI, Query
from pydantic import BaseModel
from typing import List
<p>app = FastAPI(title="User API", version="0.1.0")</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/skill4014" title="Python数据分析(专业版)"><img
                                                                                src="https://img.php.cn/upload/skill/000/000/081/178988768668922.jpg" alt="Python数据分析(专业版)"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/skill4014" title="Python数据分析(专业版)">Python数据分析(专业版)</a>
                                                                        <p>企业级Python数据分析方案,支持机器学习建模、时间序列预测、大数据处理与自动化报表。</p>
                                                                </div>
                                                                <a href="/xiazai/skill4014" title="Python数据分析(专业版)" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><p>class User(BaseModel):
id: int
name: str
email: str | None = None  # Python 3.10+ 语法,旧版本用 Optional[str]</p><p>@app.get("/users", response_model=List[User])
def list_users(
skip: int = Query(0, ge=0),
limit: int = Query(10, gt=0, le=100)
):
return [{"id": 1, "name": "Alice", "email": "alice@example.com"}]</p><p>@app.get("/users/{user_id}", response_model=User)
def get_user(user_id: int = Path(..., gt=0)):
return {"id": user_id, "name": "Bob"}

运行 uvicorn main:app --reload,访问 http://127.0.0.1:8000/docs 就能看到交互式 Swagger UI,所有参数类型、必填/可选、校验规则(如 ge=0)都已渲染。

常见踩坑点:类型注解 vs 运行时行为

文档生成完全依赖静态类型注解,但实际校验发生在运行时。容易混淆的几个地方:

  • 路径参数必须用 Path(...) 显式声明,否则会被当成查询参数——即使函数签名写了 user_id: int
  • response_model 不影响返回值类型检查,只控制文档和响应序列化;若返回字典而非 User 实例,仍会通过,但可能丢失验证逻辑
  • 使用 UnionAny 会导致 OpenAPI schema 退化为 object,建议用 Literal["a", "b"] 或枚举替代
  • 嵌套模型中含 datetime 字段时,需继承 BaseModel 并用 datetime.datetime 注解,否则 JSON 序列化失败

真正麻烦的不是生成文档,而是让类型注解始终反映真实数据契约——比如数据库字段是否允许 NULL、前端传来的字符串要不要 strip、时间戳该用 UTC 还是本地时区。这些细节不会自动出现在 Swagger 里,得靠模型字段的 defaultdefault_factoryField(..., description="...") 手动补全。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1531

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

3584

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1549

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

20417

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2587

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1063

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.08.10

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn