说起FastAPI,咱们一开始是不太想测验的,毕竟是个没测验过的开发结构,怕踩坑,怕影响项目开发周期。
一直以来咱们的首要开发结构是 Django,Django 是个非常便利的 Python 后端结构,一条命令即可生成规范的项目结构,命令创立子运用,健壮的数据库 ORM 支撑,功用完善、要素齐全:自带很多常用工具和结构(比方分页,auth,权限办理), 合适快速开发企业级网站。完善的文档:经过多年的发展和完善,Django 有广泛的实践事例和完善的在线文档,能够让开发人员有好的借鉴途径。而且运用很多,能够借鉴的例子也很多。现在 NetDevOps 的渠道后端,大多数都是根据 Python 的 Django 来开发的,原因是:python 确实上手快,django 支撑完善,能够灵敏的建立和设备的联系并生成自带的办理页面。
但是Django太全了太重了,随着开发周期越往后,开发模块越来越多,整个程序就显得异常臃肿,代码逻辑彼此耦合非常严重,整个体系需求坚持极高的稳定性。所以,咱们期望能够有个小而精的结构,能够逐步的将Django项目中的模块渐渐做拆分,做解耦,做程序的可插拔。FastAPI这时候进入到咱们的视界。
FastAPI 顾名思义,一个字,便是快。根据(并彻底兼容)OPenAPI 的相关开放规范。
- 高功用:FastAPI 选用异步编程模式,根据 Starlette 结构和 pydantic 库进行开发。其功用比较于 Flask 和 Django 均有很大进步。
- 简单易用:FastAPI 供给了主动生成 API 文档的功用,丰厚的文档能够让开发人员更快速地了解 API 的运用方法。
- 规范化:FastAPI 默认支撑 OpenAPI(前身为 Swagger)和 JSON Schema,从而规范化 API 的规划和发布。
- 类型检查:FastAPI 强制运用类型注解,使得代码更加谨慎,一起能够运用 mypy 等类型检查工具来保证代码的质量。
- 整合多种数据库支撑:FastAPI 能够无缝进行整合多种数据库的运用,比方 SQLAlchemy、Tortoise ORM 等。
运用 FastAPI 能够进步功用、简化开发、规范 API 规划、添加代码可读性和可维护性,从而促进开发功率的进步。 FastAPI 站在以下巨人的膀子之上:
Starlette 担任 web 部分。 Pydantic 担任数据部分。
Starlette
Starlette 是一个轻量级的 ASGI 结构和工具包,特别合适用来构建高功用的 asyncio 服务.
Starlette 的首要特性:
- 功用体现优异
- WebSocket 支撑.
- GraphQL 支撑.
- 进程内的后台任务履行
- 发动和封闭服务的事件触发
- 测验客户端构建于 requests.
- 支撑 CORS, GZip, Static Files, Streaming 呼应.
- 支撑会话和 Cookie
- 100% 测验覆盖率
- 100% 类型注解
- 无依靠
Pydantic
pydantic 库是 python 中用于数据接口界说检查与设置办理的库。
pydantic 在运行时强制履行类型提示,并在数据无效时供给友好的过错。
它具有如下优点:
- 与 IDE/linter 完美调配,不需求学习新的模式,仅仅运用类型注解界说类的实例
- 多用途,BaseSettings 既能够验证请求数据,也能够从环境变量中读取体系设置
- 快速
- 能够验证复杂结构
- 可扩展,能够运用 validator 装修器装修的模型上的方法来扩展验证
- 数据类集成,除了 BaseModel,pydantic 还供给了一个 dataclass 装修器,它创立带有输入数据解析和验证的普通 Python 数据类。
FastAPI 引荐运用 uvicorn 发动服务
Uvicorn 是根据 uvloop 和 httptools 构建的非常快速的 ASGI 服务器。
uvicorn 是一个根据 asyncio 开发的一个轻量级高效的 web 服务器结构
uvicorn 规划的初衷是想要完成两个目标:
运用 uvloop 和 httptools 完成一个极速的 asyncio 服务器
完成一个根据 ASGI(异步服务器网关接口)的最小运用程序接口。
它现在支撑 http, websockets, Pub/Sub 播送,而且能够扩展到其他协议和音讯类型。
uvloop 用于替换规范库 asyncio 中的事件循环,运用 Cython 完成,它非常快,能够使 asyncio 的速度进步 2-4 倍。asyncio 不用我介绍吧,写异步代码离不开它。
httptools 是 nodejs HTTP 解析器的 Python 完成。
总述
综上所述,咱们引荐运用 FastAPI 来进行快速开发和程序构建,尤其是功用较为简单的运用,它也支撑数据结构校验和异步。进步代码履行功率和开发功率。一起具有丰厚的数据支撑,根据 OpenAPI 的自助交互式文档,让开发过程中的调试也非常便利。快速灵敏开发是咱们的寻求。
- 快速开发:供给根底结构和默认设置,使开发人员能够快速构建 API,并主动生成文档和测验样例。
- 高功用:根据 Python 3.6+、ASGI 和 asyncio 等技能,供给高功用特性,因此在高流量和低延迟的运用场景下比其他结构有更好的呼应速度和功用。
- 文档主动生成:内置文档生成器,主动解析函数参数和返回值来生成规范化的文档,并支撑 OpenAPI 和 JSON Schema 的规范格式。
- 强类型支撑:选用类型注解,进步代码的质量和可读性,削减出现运行时过错的可能性。
- 多种数据库支撑:支撑多种数据库,包括 SQLAlchemy、Tortoise ORM 等,能够便利地处理数据库操作。
FastAPI 是一款快速、高功用、安全、易用、规范化的 Web 运用结构,能够极大地进步开发功率,保证运用的高功用和可靠性。