本文讲述了什么启发了 FastAPI 的诞生它与其他替代框架的对比以及从中汲取的经验。如果不是基于前人的成果FastAPI 将不会存在。在 FastAPI 之前前人已经创建了许多工具 。几年来我一直在避免创建新框架。首先我尝试使用许多不同的框架插件和工具来解决 FastAPI 涵盖的所有功能。但是有时候没有更好的办法除了创建具有所有这些功能的东西从以前的工具中汲取最佳创意并以最佳方式将它们组合起来使用以前甚至没有的语言功能Python 3.6类型提示。启发过 FastAPI 的框架DjangoDjango 是最流行的 Python 框架受到广泛信任。它用于构建 Instagram 之类的系统。它与关系数据库例如 MySQL 或 PostgreSQL相对紧密地结合在一起因此以NoSQL 数据库例如 CouchbaseMongoDBCassandra 等作为 django 的主存储引擎并不是一件容易的事。Django REST FrameworkDjango REST Framework 是一个非常灵活的框架用于构建 Web API以改善 Django 的 API 功能。MozillaRed Hat 和 Eventbrite 等许多公司都使用它。Django REST Framework 是第一个自动生成 API 文档的框架自动生成 API 的接口文档是 FastAPI 框架诞生的缘由之一。注意Django REST Framework 框架的作者是 Tom Christie Tom Christie 也创造了 Starlette和 Uvicorn。FastAPI 正是建立在 Starlette 和 Uvicorn 的基础之上。启发 FastAPI 地方有一个自动 API 文档Web 用户界面可供用户测试。FlaskFlask 是一种轻量级的框架它不包括数据库集成也没有很多的附带的功能虽然这Django 那里是默认提供的。这个简单性和灵活的特性允许使用 NoSQL 数据库作为主数据存储。尽管文档在某些方面有所技术性但它非常简单因此学习起来相对直观。它还常用于其他不需要数据库用户管理或 Django 中预建功能的应用程序。尽管其中许多功能都可以通过添加插件来实现。各个模块之前的解耦使之成为一个“微框架”可以通过扩展为精确地提供所需的东西这是我想要保留的一项关键功能。考虑到 Flask 的简单性它似乎很适合构建 API。接下来要找到的是 Flask的 “ Django REST Framework”。启发 FastAPI 地方成为一个微框架。易于混合和匹配所需的工具和零件。拥有一个简单易用的路由系统。RequestsFastAPI 实际上不是 Requests 的替代工具。它们的适用范围非常不同。实际上在FastAPI 应用程序内部使用 Requests 是很常见的。但是FastAPI 从 Requests 中获得了很多启发。Requests 是一个与API作为客户端进行交互的库而 FastAPI 是一个用于构建 API作为服务器的库。它们或多或少地处于相反的末端彼此互补。Requests 具有非常简单直观的设计非常易于使用并具有合理的默认值。但同时它非常强大且可自定义。这就是为什么如官方网站所述Requests 是有史以来下载次数最多的Python软件包之一您的使用方式非常简单。例如要发出GET请求您可以编写response requests.get(http://example.com/some/url)FastAPI 对应的 API 路径操作如下所示app.get(/some/url) def read_url(): return {message: Hello World}它们使用起来的相似之处如requests.get(…)和app.get(…)。启发 FastAPI 地方:拥有简单直观的API。 直接直观地使用HTTP方法名称操作。 具有合理的默认值功能强大的自定义。Swagger / OpenAPI我想要 Django REST Framework 的主要功能是自动 API 文档。然后我发现 API 文档有一个标准叫 Swagger 它使用 JSON 或 YAML 来描述。并且 Swagger API 的 Web 用户界面已经被人创建出来了。因此能够为 API 生成Swagger 文档将允许自动使用此 Web 用户界面。在某个时候Swagger 被授予 Linux Foundation将其重命名为 OpenAPI。这就是为什么在谈论版本 2.0 时通常会说“ Swagger”对于版本3来说是“ OpenAPI”。启发 FastAPI 地方:为API规范采用开放标准而不是使用自定义架构。并集成基于标准的用户界面工具Swagger UIReDoc选择这两个是因为它们相当受欢迎且稳定但是通过快速搜索您可以找到数十个 OpenAPI 的其他替代用户界面可以与FastAPI一起使用。Flask REST frameworks有几个 Flask REST frameworks 但经过调查和试用我发现不少项目都停产或放弃还存在有一些长期的问题使得它们并不适合解决前面的问题。Marshmallow一个由 API 系统所需的主要功能是数据的序列化就是把数据从编程语言中的对象转称成可以在网络上传输的对象比如数据库中的数据转换为 JSON 对象。将 Python 中的datetime 对象转为字符串等等。另外一个功能就是数据的验证确保传入的参数是有效的例如有些字段是一个 int类型而不是字符串这在检测输入数据是非常有用的。如果没有数据验证你就必须用手工写代码来完成所有的检查。这两点功能就是 Marshmallow 所提供的这些是一个伟大的图书馆之前我经常使用它。Marshmallow 产生之前 Python 还没有加入类型提示。因此定义一个 schema 你需要引入 Marshmallow 特定的 utils 的和类。启发 FastAPI 地方:使用代码来定义提供的数据类型和验证的 schema验证都是自动化的。FastAPI 使用的框架PydanticPydantic 是一个库基于Python类型提示来定义数据验证序列化和文档使用JSON模式。这使其非常直观。它可与 Marshmallow 媲美。尽管在基准测试中它比Marshmallow 更快。并且由于它基于相同的Python类型提示因此对编辑器的支持非常棒。FastAPI 使用它来处理所有数据验证数据序列化和自动模型文档基于JSON Schema。然后FastAPI 会获取该 JSON Schema 数据并将其放入OpenAPI 中除此之外它还会执行其他所有操作。StarletteStarlette 是一种轻量级的 ASGI 框架/工具包是构建高性能 asyncio 服务的理想选择。它非常简单直观。它的设计易于扩展并具有模块化组件。它具有令人印象深刻的性能。WebSocket支持。GraphQL支持。处理中的后台任务。启动和关闭事件。测试基于 requests 的客户端。CORSGZip静态文件流式响应。会话和 Cookie 支持。100 的测试覆盖率。100 类型注释的代码库。零硬依赖性。Starlette 是目前测试最快的 Python 框架。只有 Uvicorn 超越了它Uvicorn 不是框架而是服务器。Starlette 提供了所有基本的 Web 微框架功能。但是它不提供自动数据验证序列化或API 文档。这是 FastAPI 在顶部添加的主要内容之一全部基于Python类型提示使用Pydantic。以及依赖注入系统安全实用程序OpenAPI 模式生成等。技术细节ASGI 是 Django 核心团队成员开发的新“标准”。尽管他们正在这样做但它仍然不是“ Python标准”PEP。但是它已经被多种工具用作“标准”。这可以大大提高互操作性因为您可以将 Uvicorn 切换到任何其他 ASGI 服务器例如 Daphne 或 Hypercorn也可以添加与ASGI兼容的工具例如 python-socketio。FastAPI 使用它来处理所有核心 Web 部件。在顶部添加功能。类 FastAPI 本身直接继承Starlette。因此使用 Starlette 可以执行的任何操作都可以直接使用 FastAPI 进行。UvicornUvicorn 是基于 uvloop 和 httptools 构建的如闪电般快速的 ASGI 服务器。它不是Web框架而是服务器。例如它不提供用于按路径进行路由的工具。那是像 Starlette或FastAPI这样的框架可以提供的。它是 Starlette 和 FastAPI 的推荐服务器。FastAPI 推荐它为主 Web服务器运行 FastAPI 应用程序。您可以将其与 Gunicorn 结合使用以拥有异步多进程服务器。在“ 部署” 部分中查看更多详细信息。最后下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。