跳到内容

历史、设计与未来

不久前,一位 FastAPI 用户问道

这个项目的历史是什么?它似乎在几周内就从默默无闻变得非常强大 [...]

以下是关于这段历史的简述。

替代方案

多年来,我一直致力于创建具有复杂需求(机器学习、分布式系统、异步作业、NoSQL 数据库等)的 API,并领导过多个开发团队。

在此过程中,我需要调研、测试并使用许多替代方案。

FastAPI 的历史在很大程度上是其前身的历史。

正如替代方案一节中所述

如果没有前人的工作,FastAPI 就不会存在。

在此之前,已经有许多工具的诞生为它的创建提供了灵感。

几年来我一直避免创建新的框架。起初,我尝试使用许多不同的框架、插件和工具来解决 FastAPI 所涵盖的所有功能。

但在某个阶段,唯一的办法就是创建一个能够提供所有这些功能的工具,吸取先前工具的最佳理念,以尽可能最好的方式将它们结合起来,并利用以前甚至不可用的语言特性(Python 3.6+ 类型提示)。

调研

通过使用所有先前的替代方案,我有机会向它们学习,汲取灵感,并为自己以及我合作过的开发团队找到我能想到的最佳组合方式。

例如,很明显,它理想情况下应该基于标准的 Python 类型提示。

此外,最好的方法是使用现有的标准。

因此,在开始编写 FastAPI 之前,我花了好几个月的时间研究 OpenAPI、JSON Schema、OAuth2 等规范,了解它们之间的关系、重叠部分和差异。

设计

然后,我花了一些时间设计我作为用户(使用 FastAPI 的开发者)所期望的开发者“API”。

我在最流行的 Python 编辑器中测试了几个想法:PyCharm、VS Code、基于 Jedi 的编辑器。

根据最近的 Python 开发者调查,这些涵盖了大约 80% 的用户。

这意味着 FastAPI 是专门针对 80% 的 Python 开发者使用的编辑器进行测试的。而且由于大多数其他编辑器的运行方式相似,它的所有优势应该几乎适用于所有编辑器。

通过这种方式,我可以找到尽可能减少代码重复、实现全局自动补全、类型检查和错误检查等的最佳方法。

这一切都是为了给所有开发者提供最佳的开发体验。

需求

在测试了几个替代方案后,我决定使用 Pydantic,因为它具有诸多优势。

之后,我为其做出了贡献,使其完全符合 JSON Schema,支持多种方式定义约束声明,并基于在多个编辑器中的测试改进了编辑器支持(类型检查、自动补全)。

在开发过程中,我还为另一个关键需求 Starlette 做了贡献,它是 FastAPI 的另一个核心支柱。

开发

当我开始创建 FastAPI 本身时,大部分组件都已经到位,设计已经明确,需求和工具也已准备就绪,对于标准和规范的知识也清晰且掌握得当。

未来

到目前为止,很明显 FastAPI 及其理念对许多人来说是非常有用的。

因为它能更好地适应许多用例,所以人们开始选择它,而不是之前的替代方案。

许多开发者和团队已经在他们的项目中依赖 FastAPI(包括我和我的团队)。

但是,未来仍有许多改进和功能有待实现。

FastAPI 前途无量。

同时也非常感谢您的帮助