FastAPI 特征

FastAPI为您提供以下内容:

基于开放标准

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

自动文档

交互式API文档和Exploration Web用户界面。由于该框架基于OpenAPI,因此有多个选项,默认情况下包含2个。

  • Swagger UI,具有交互式开发功能,可从浏览器直接调用和测试您的API。
  • 替代的API文档ReDoc

基于最新Python

它们全部基于标准的Python 3.6类型声明(感谢Pydantic)。没有新的语法需要学习。只是标准的现代Python。

如果您需要2分钟的时间来重新了解如何使用Python类型(即使您不使用FastAPI),请查看简短的教程:Python类型。

您使用以下类型编写标准的Python:

  1. from typing import List, Dict
  2. from datetime import date
  3. from pydantic import BaseModel
  4. # Declare a variable as a str
  5. # and get editor support inside the function
  6. def main(user_id: str):
  7. return user_id
  8. # A Pydantic model
  9. class User(BaseModel):
  10. id: int
  11. name: str
  12. joined: date

然后可以这样使用:

  1. my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
  2. second_user_data = {
  3. "id": 4,
  4. "name": "Mary",
  5. "joined": "2018-11-30",
  6. }
  7. my_second_user: User = User(**second_user_data)

**second_user_data 代表:

将second_user_datadict 的键和值直接作为键值参数传递,等效于:User(id=4, name=”Mary”, joined=”2018-11-30”)

编辑器支持

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

无需再为了不键入错误的键名,在文档之间来回或上下滚动以查找是否最终使用username或user_name。

简短

对于所有内容,它都具有合理的默认值,并且在所有位置都具有可选配置。可以对所有参数进行微调,以执行所需的操作并定义所需的API。

但是默认情况下,所有这些“都可以正常工作”。

验证

验证大多数(或所有?)Python 数据类型,包括:

  • JSON对象(dict)。
  • list定义项目类型的JSON数组()。
  • 字符串(str)字段,用于定义最小和最大长度。
  • 具有最小值和最大值的数字(int,float)等。

验证更多特殊类型,例如:

  • 网址。
  • 电子邮件。
  • UUID。
  • 其他别的类型。

所有验证均由完善且强大的Pydantic处理。

安全和认证

集成了安全性和身份验证。无需对数据库或数据模型进行任何妥协。

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

  1. HTTP基本。
  2. OAuth2(也带有JWT令牌)。查看有关使用JWTOAuth2的教程。
  3. API密钥:
  4. Header
  5. 查询参数。
  6. Cookies

加上Starlette的所有安全功能(包括会话cookie)。

所有这些都是可重用的工具和组件,可轻松与您的系统,数据存储,关系数据库和NoSQL数据库等集成。

依赖注入

FastAPI包括一个非常易于使用但功能强大的“ 依赖注入”系统。

  1. 甚至依赖项也可以具有依赖项,从而创建了依赖项的层次结构或“图”。
  2. 全部由框架自动处理。
  3. 所有依赖项都可能需要来自请求的数据,并增加了路径操作约束和自动文档。
  4. 甚至对依赖项中定义的路径操作参数的自动验证。
  5. 支持复杂的用户身份验证系统,数据库连接等。
  6. 不与数据库,前端等妥协。但可以轻松地与所有数据库集成。

无限的“插件”

或者以其他方式,不需要它们,导入并使用所需的代码。

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