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...

相关推荐
这个男人是小帅23 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Shy9604184 小时前
Doc2Vec句子向量
python·语言模型
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端
2401_857610036 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
秀儿还能再秀7 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
用户3157476081357 小时前
成为程序员的必经之路” Git “,你学会了吗?
面试·github·全栈