跳转至

特性

FastAPI 特性

FastAPI 为您提供以下功能:

基于开放标准

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

自动文档

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

  • Swagger UI,具有交互式探索功能,可直接从浏览器调用和测试您的 API。

Swagger UI 交互

  • 使用 ReDoc 提供替代的 API 文档。

ReDoc

纯现代 Python

一切都基于标准的 Python 类型声明(得益于 Pydantic)。无需学习新语法。只需标准的现代 Python。

如果您需要花两分钟复习如何使用 Python 类型(即使您不使用 FastAPI),请查看简短教程:Python 类型

您编写带类型的标准 Python:

from datetime import date

from pydantic import BaseModel

# 将变量声明为 str
# 并在函数内获得编辑器支持
def main(user_id: str):
    return user_id


# 一个 Pydantic 模型
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)

Info

**second_user_data 表示:

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

编辑器支持

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

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

整个 FastAPI 框架都基于满足这一点。自动补全无处不在。

您很少需要回头查阅文档。

以下是您的编辑器可能帮助您的方式:

编辑器支持

编辑器支持

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

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

简洁

它为所有内容提供了合理的默认值,并且处处都有可选的配置。所有参数都可以微调以执行您需要的操作并定义您需要的 API。

但默认情况下,一切都能“正常工作”

验证

  • 对大多数(或全部?)Python数据类型进行验证,包括:
    • JSON 对象(dict)。
    • 定义项目类型的 JSON 数组(list)。
    • 字符串(str)字段,定义最小和最大长度。
    • 数字(intfloat),具有最小值和最大值等。
  • 对更特殊的类型进行验证,例如:
    • URL。
    • 电子邮件。
    • UUID。
    • ……以及其他。

所有验证都由成熟且健壮的 Pydantic 处理。

安全性与认证

集成了安全性和认证。与数据库或数据模型没有任何妥协。

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

  • HTTP 基本认证。
  • OAuth2(也使用 JWT 令牌)。查看关于 OAuth2 与 JWT 的教程。
  • API 密钥,位于:
    • 头部。
    • 查询参数。
    • Cookie 等。

此外,还包括 Starlette 的所有安全功能(包括会话 Cookie)。

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

依赖注入

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

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

无限的“插件”

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

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

经过测试

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

Starlette 特性

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

FastAPI 实际上是 Starlette 的一个子类。所以,如果您已经了解或使用 Starlette,大多数功能将以相同的方式工作。

通过 FastAPI,您获得所有 Starlette 的特性(因为 FastAPI 只是加强版的 Starlette):

Pydantic 特性

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

包括也基于 Pydantic 的外部库,例如用于数据库的 ORMODM

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

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

通过 FastAPI,您获得所有 Pydantic 的特性(因为 FastAPI 在所有数据处理上都基于 Pydantic):

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