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:
from typing import List, Dict
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_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中定义的所有安全方案,包括:
HTTP基本。
OAuth2(也带有JWT令牌)。查看有关使用JWT的OAuth2的教程。
API密钥:
Header。
查询参数。
Cookies等
加上Starlette的所有安全功能(包括会话cookie)。
所有这些都是可重用的工具和组件,可轻松与您的系统,数据存储,关系数据库和NoSQL数据库等集成。
依赖注入
FastAPI包括一个非常易于使用但功能强大的“ 依赖注入”系统。
甚至依赖项也可以具有依赖项,从而创建了依赖项的层次结构或“图”。
全部由框架自动处理。
所有依赖项都可能需要来自请求的数据,并增加了路径操作约束和自动文档。
甚至对依赖项中定义的路径操作参数的自动验证。
支持复杂的用户身份验证系统,数据库连接等。
不与数据库,前端等妥协。但可以轻松地与所有数据库集成。
无限的“插件”
或者以其他方式,不需要它们,导入并使用所需的代码。
任何集成的设计都非常易于使用(具有依赖项),因此您可以使用两行代码,使用与路径操作相同的结构和语法,为应用程序创建一个“插件” 。