跳转至

历史、设计与未来

一段时间前,一位 FastAPI 用户提出

这个项目的历史是怎样的?它似乎短短几周内就从默默无闻变得如此出色 [...]

以下是一些相关历史。

替代方案

多年来我一直为复杂需求构建 API(机器学习、分布式系统、异步任务、NoSQL 数据库等),并领导多个开发团队。

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

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 拥有光明的未来。

我们非常期待您的参与支持