FastAPI 是什么?

Django、FastAPI 都是 Web 开发框架,REST、GraphQL 是 API 的形式。Django、FastAPI 都可以实现 REST 接口和 GraphQL 接口。

以下是我的一些初步的认识:

FastAPI 是一个轻量级的 Web 框架。相比起来,Django 是 battery included,虽然配置麻烦,但默认就带了许多功能,包括很好用的 ORM、migration 工具,也包括很多安全方面的中间件等等,还有比如模板系统、静态资源管理系统等等,对于一般的业务网站来说,Django 是开箱即用的。FastAPI 则非常轻量,它本身什么都不带,没有 ORM、没有 migration,没有中间件,什么都没有。FastAPI 是专门针对 REST 接口定制优化的,使用 FastAPI,可以自动生成 openapi 文档(用 swagger 渲染),代码本身也有很强的注释属性(即看代码跟看文档效果是类似的)。FastAPI 是强类型的,强制使用 type hint,强制使用 pydantic,数据类型检查也是强制的(包括输入检查和输出检查)。FastAPI 本身的所有代码都充分考虑了 IDE 补全,包括考虑如何让业务代码也可以有 IDE 补全。这个补全是基于强类型的背景,因此许多问题也都可以静态检查出来。FastAPI 借鉴了 Angular 的依赖注入机制,这套机制我觉得比 Django 的中间件方式要直观很多。FastAPI 支持 GraphQL,但也是用 Graphene 实现的,只是提供了路由挂载支持,与 Django 无异。因此在 FastAPI 里面写 GraphQL 的话,其实得不到上述任何优点,除了轻量级以外,并没有什么优势。由于 FastAPI 不自带 ORM、migration 工具,我们如果要用 FastAPI 的话,就得使用其他 ORM、migration。目前最好的候选项是 SQLAlchemy。

以上是我的认识,欢迎大家补充讨论。

查看原文