注册

为什么选择FastAPI?

说起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 的主要特性:



  1. 性能表现优异
  2. WebSocket 支持.
  3. GraphQL 支持.
  4. 进程内的后台任务执行
  5. 启动和关闭服务的事件触发
  6. 测试客户端构建于 requests.
  7. 支持 CORS, GZip, Static Files, Streaming 响应.
  8. 支持会话和 Cookie
  9. 100% 测试覆盖率
  10. 100% 类型注解
  11. 无依赖

Pydantic


pydantic 库是 python 中用于数据接口定义检查与设置管理的库。


pydantic 在运行时强制执行类型提示,并在数据无效时提供友好的错误。


它具有如下优点:



  1. 与 IDE/linter 完美搭配,不需要学习新的模式,只是使用类型注解定义类的实例
  2. 多用途,BaseSettings 既可以验证请求数据,也可以从环境变量中读取系统设置
  3. 快速
  4. 可以验证复杂结构
  5. 可扩展,可以使用 validator 装饰器装饰的模型上的方法来扩展验证
  6. 数据类集成,除了 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 应用框架,能够极大地提高开发效率,保证应用的高性能和可靠性。


作者:一个有理想的工程师
链接:https://juejin.cn/post/7225424380468953145
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册