跳到内容

特性

FastAPI 特性

FastAPI 提供以下特性:

基于开放标准

  • OpenAPI 用于 API 创建,包括 路径 操作、参数、请求体、安全性等的声明。
  • 使用 JSON Schema 自动生成数据模型文档(因为 OpenAPI 本身就是基于 JSON Schema 的)。
  • 经过仔细研究,围绕这些标准进行设计。而非事后在顶层添加。
  • 这也允许在多种语言中使用自动的 客户端代码生成

自动文档

交互式 API 文档和探索性 Web 用户界面。由于该框架基于 OpenAPI,因此有多种选择,其中默认包含两种。

  • Swagger UI,支持交互式探索,直接从浏览器调用和测试您的 API。

Swagger UI interaction

  • 使用 ReDoc 的替代 API 文档。

ReDoc

纯粹的现代 Python

它完全基于标准的 Python 类型 声明(归功于 Pydantic)。无需学习新语法。就是标准的现代 Python。

如果您需要快速回顾如何使用 Python 类型(即使您不使用 FastAPI),请查看此简短教程:Python 类型

您使用类型编写标准 Python 代码

from datetime import date

from pydantic import BaseModel

# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
    return user_id


# A Pydantic model
class User(BaseModel):
    id: int
    name: str
    joined: date

然后可以像这样使用

my_user: User = User(id=3, name="John Doe", joined="2018-07-19")

second_user_data = {
    "id": 4,
    "name": "Mary",
    "joined": "2018-11-30",
}

my_second_user: User = User(**second_user_data)

信息

**second_user_data 意味着

second_user_data 字典的键和值直接作为键值参数传递,等同于:User(id=4, name="Mary", joined="2018-11-30")

编辑器支持

整个框架的设计都旨在易于使用和直观,所有决策甚至在开始开发之前就在多个编辑器上进行了测试,以确保最佳的开发体验。

在 Python 开发者调查中,最常用的功能之一显然是“自动补全”

整个 FastAPI 框架都是为了满足这一点而构建的。自动补全无处不在。

您将很少需要回查文档。

以下是您的编辑器可能如何帮助您

editor support

editor support

您将在以前可能认为不可能的代码中获得补全。例如,来自请求的 JSON 主体中(可能已嵌套的)price 键。

不再需要输入错误的键名、在文档之间来回切换,或上下滚动来查找您最终使用的是 username 还是 user_name

简洁

它为所有内容提供了合理的默认值,并随处提供可选配置。所有参数都可以进行微调,以实现您所需的功能并定义您需要的 API。

但默认情况下,一切都“开箱即用”

数据校验

  • 对大多数(或所有?)Python 数据类型 的校验,包括

    • JSON 对象 (dict)。
    • JSON 数组 (list) 定义项类型。
    • 字符串 (str) 字段,定义最小和最大长度。
    • 数字 (int, float) 具有最小值和最大值等。
  • 对更特殊类型的校验,例如

    • URL。
    • 电子邮件。
    • UUID。
    • ……以及其他。

所有校验均由成熟稳健的 Pydantic 处理。

安全与认证

安全和认证集成。不与数据库或数据模型妥协。

OpenAPI 中定义的所有安全方案,包括

  • HTTP Basic。
  • OAuth2(也支持 JWT token)。查看 使用 JWT 的 OAuth2 教程。
  • API 密钥在
    • 请求头。
    • 查询参数。
    • Cookie 等。

此外还有 Starlette 的所有安全特性(包括 会话 Cookie)。

所有这些都构建为可重用工具和组件,易于与您的系统、数据存储、关系型和 NoSQL 数据库等集成。

依赖注入

FastAPI 包含一个极其易用但功能极其强大的 依赖注入 系统。

  • 甚至依赖项也可以拥有依赖项,从而创建依赖项的层次结构或“图”
  • 所有这些都由框架自动处理
  • 所有依赖项都可以从请求中获取数据,并增强路径操作的约束和自动文档。
  • 甚至对依赖项中定义的 路径操作 参数进行自动校验
  • 支持复杂的用户认证系统、数据库连接 等。
  • 不与数据库、前端等**妥协**。但易于与所有这些集成。

无限“插件”

换句话说,不需要它们,导入并使用您需要的代码即可。

任何集成都被设计为如此简单易用(通过依赖项),您可以使用与 路径操作 相同的结构和语法,用两行代码为您的应用程序创建一个“插件”。

经过测试

  • 100% 测试覆盖率
  • 100% 类型注解 代码库。
  • 已在生产应用中使用。

Starlette 特性

FastAPI 完全兼容(并基于)Starlette。因此,您拥有的任何额外的 Starlette 代码也将起作用。

FastAPI 实际上是 Starlette 的子类。因此,如果您已经了解或使用 Starlette,大部分功能将以相同方式工作。

有了 FastAPI,您将获得 Starlette 的所有特性(因为 FastAPI 只是增强版的 Starlette)

  • 令人印象深刻的性能。它是 最快的 Python 框架之一,与 NodeJSGo 不相上下
  • WebSocket 支持。
  • 进程内后台任务。
  • 启动和关闭事件。
  • 基于 HTTPX 构建的测试客户端。
  • CORS、GZip、静态文件、流式响应。
  • 会话和 Cookie 支持。
  • 100% 测试覆盖率。
  • 100% 类型注解代码库。

Pydantic 特性

FastAPI 完全兼容(并基于)Pydantic。因此,您拥有的任何额外的 Pydantic 代码也将起作用。

包括其他基于 Pydantic 的外部库,如数据库的 ORMODM

这也意味着在许多情况下,您可以将从请求中获得的同一对象直接传递给数据库,因为所有内容都会自动校验。

反之亦然,在许多情况下,您可以将从数据库中获取的对象直接传递给客户端

有了 FastAPI,您将获得 Pydantic 的所有特性(因为 FastAPI 的所有数据处理都基于 Pydantic)

  • 无需烧脑:
    • 无需学习新的模式定义微语言。
    • 如果您了解 Python 类型,您就知道如何使用 Pydantic。
  • 与您的 IDE/linter/大脑 完美配合
    • 因为 Pydantic 数据结构只是您定义的类的实例;自动补全、代码检查(linting)、mypy 和您的直觉都应该与您校验过的数据正常工作。
  • 校验复杂结构
    • 使用分层的 Pydantic 模型、Python typingListDict 等。
    • 校验器允许将复杂的数据模式清晰、轻松地定义、检查并以 JSON Schema 形式文档化。
    • 您可以拥有深度嵌套的 JSON 对象,并对它们进行全部校验和注解。
  • 可扩展:
    • Pydantic 允许定义自定义数据类型,或者您可以通过模型上使用 validator 装饰器装饰的方法来扩展校验。
  • 100% 测试覆盖率。