FastAPI简介与快速入门

一、认识FastAPI框架

FastAPI 框架,高性能,易学,快速编码,可用于生产的现代化Web框架。

官网:fastapi.tiangolo.com/

Github:github.com/tiangolo/fa...

这里先引用官网的介绍,然后跟我实践总结的优势进行对比。

主要特点

  • Fast : Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available. 快速:非常高的性能,与 NodeJS 和 Go 相当(感谢 Starlette 和 Pydantic)。可用的最快的 Python 框架之一。

  • Fast to code: Increase the speed to develop features by about 200% to 300%. * 快速编码:将开发功能的速度提高约 200% 至 300%。

  • Fewer bugs: Reduce about 40% of human (developer) induced errors. 更少的错误:减少约 40% 的人为(开发人员)引起的错误。

  • Intuitive: Great editor support. Completion everywhere. Less time debugging. 直观:强大的编辑器支持。到处都完成。调试时间更少。

  • Easy: Designed to be easy to use and learn. Less time reading docs. 简单:旨在易于使用和学习。阅读文档的时间更少。

  • Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. 简而言之:最大限度地减少代码重复。每个参数声明具有多个功能。更少的错误。

  • Robust: Get production-ready code. With automatic interactive documentation. 健壮:获取可用于生产的代码。具有自动交互式文档。

  • Standards-based : Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. 基于标准:基于(并完全兼容)API 开放标准:OpenAPI(以前称为 Swagger)和 JSON Schema。

二、FastAPI的优势

Fastapi 的接口文档可以在编写入参、出参模型的时候就可以生成,还可以导入到apifox中,可以减少大量开发时间,并做到了参数校验的效果,以及方便前后端接口对齐,后续只需关注业务逻辑开发,最后就是配上 uvicorn 性能很强。

  • 定义好接口入参、出参的Pydantic模型,就可以生成在线的 OpenAPI 在线接口文档,还做到了接口参数校验,可以节省开发时间,最后如果在线文档前端觉得不好用还可以 将OpenAPI.json 导入到apifox中使用十分方便,前端还可以根据apifox的接口文档生成ts代码。

  • 暴露了许多内置入口,例如WEB中间件middleware、依赖depends、错误处理 error_handler、应用生命周期钩子函数等,都非常方便接入

  • 异步框架,对于没有支持异步方法的第三方库,FastAPI再定义路由函数时,使用普通函数还是会自动开始线程处理,不会阻塞主线程,BackgroundTasks 后台任务也是对同异步函数都已封装好支持,可以让开发更专注业务逻辑处理

  • FastAPI 小巧轻便易学、易使用,跟 Flask 一样小巧,但内置了好多框架函数与装饰器比Flask等其他框架更好使用,其他框架要通过第三方库支持和自己封装。

  • 依赖为 Starlette 的 ASGI 异步框架,性能不错,再通过 uvicorn 把Python底层使用的事件循环替换成 uvloop 性能将更强。

这里有很多名词,大家可以先做简单的了解,后面会一一实践与详解。

三、快速上手

PyCharm 新建 HelloWord 上手项目

我这里是创建了一个大项目目录 FastAPI-BookletDemo 用来组织教程中的案例Demo,也方便管理。Python环境采用Conda进行虚拟环境管理。然后我是创建的纯Python项目,PyCharm专业版也可以直接创建FastAPI项目,大家可以自行尝试。

Conda虚拟环境管理:juejin.cn/post/697058...

pip配置国内源:juejin.cn/post/699740...

准备依赖文件并安装

ini 复制代码
# 单独安装
pip install fastapi==0.101.0
pip install uvicorn==0.23.2

# 依赖文件安装
pip install -r requirements.txt

Python的依赖文件在业界已经约定俗成了都是以 requirements.txt 命名

安装依赖的时候指定依赖的版本有助于项目的稳定。

编写代码并运行项目

python 复制代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { fastapi hello world 案例 }
# @Date: 2023/08/06 22:16
import uvicorn
from fastapi import FastAPI

app = FastAPI(description="hello world")


@app.get(path="/")
def index():
    return "index"


@app.get(path="/hello")
async def hello():
    return "hello world"


def main():
    uvicorn.run(app)


if __name__ == '__main__':
    main()

可以发现FastAPI非常方便的就可以快速构建一个简单的Web项目,并使用装饰器的方式编写路由函数。最后采用 uvicorn 进行运行。

接口访问结果图

docs接口文档效果图

redoc接口文档效果图

四、接口文档导入APIFOX

接口参数多的时候,生成的在线接口文档虽然美观,但还是会有点不便于查看具体参数。我们可以通过FastAPI生成接口文档的 openapi.json 导入到 APIFOX 中进行操作,这样查看与协作就方便多了,不仅可以动态的mock接口数据,方便开发自测,还可以通过接口文档生成对应的语言的接口代码,简直让 FastAPI 的在线文档如虎添翼,大家可以亲自体验下。

查看 openapi.json

入口地址:http://127.0.0.1:8000/openapi.json

其实就是一个接口约束的压缩的json

导入到APIFOX

apifox官网:apifox.com/

需要注册 apifox 账号,然后创建项目导入接口文档就行

加号图标选择导入

然后把FastAPI的接口文档的 openapi.json 的地址复制到这边就可以导入了,可以看见apifox支持导入的格式、种类还是挺多的。

生成接口模型代码

生成TS代码

生成Python模型代码

这里生成的是 python 3.7 的 dataclass 类的模型代码,要是可以多个选择生成 pydantic model 类的代码就好多了,这样无论是先写代码还是先写接口文档都可以节省很多时间,也保证了项目的质量,但可以通过一些GPT帮忙根据dataclass类转成业务需要的。

分模块组织的接口

分模块组织接口要通过FastAPI 的 APIRouter 会更方便些,也更符合中、大工程项目的搭建。

大家可以看官网的介绍:fastapi.tiangolo.com/tutorial/bi...

如下是我一个基于 FastAPI 开发的开源项目的接口文档,大家感兴趣也可以参考一下。

github:github.com/HuiDBK/HuiH...

相关推荐
铁皮饭盒14 分钟前
DeepSeek V4 Pro 0813发布了, 也可以部署到 Codex 了
前端·javascript·后端
EXI-小洲23 分钟前
Web Spider 某渣渣企业平台 表单参数逆向 Webpack
python·webpack·js逆向·spider
玫幽倩1 小时前
2026聚合獬豸杯决赛wp(手机取证)
python·电子取证·misc·取证·聚合·手机取证·獬豸杯
苏三说技术1 小时前
推荐一个牛逼的企业智能招聘系统
后端
FlyWIHTSKY1 小时前
在智能体系统中,什么是多模态,举例详细说明
人工智能·python·langchain
达达尼昂1 小时前
Flutter AI Harness 如何让 Agent 参与软件开发全流程
android·人工智能·后端
人工智能研究所1 小时前
GitHub 10k+ Star:用自然语言描述系统,AI 帮你生成可交互架构图
人工智能·github·交互·自然语言·系统架构图·archify
k4m7v2pz1 小时前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson
逛逛GitHub1 小时前
一个 Skill.md 拿下 1.8 万星,这个 GitHub 项目让 AI 先说重点。
github
云空2 小时前
《GitHub 从入门到进阶完整教程》
github