一度觉得 sanic是python web框架的未来,支持异步,性能好,类flask的语法,代码简单,没想到被fastapi截胡了,fastapi在github的上星速度非常快。它在怎么样把后端api做好的这件事情上,做的比sanic更全面,更彻底。
FastAPI
FastAPI 是用于构建 Web API 的现代、开源、快速、高性能的 Web 框架,它基于Python 3.6+ 标准类型提示,支持异步,正如它的名字,FastAPI 就是为构建快速的 API 而生。
优点
- 速度快:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic),是最快的 Python 网络框架之一
- 开发快:开发速度提高约 200% 至 300%
- Bug 少:人为错误减少约 40%*
- 智能:强大的编辑器支持,处处皆可自动补全,减少调试时间
- 简单:易学、易用,阅读文档所需时间更短
- 简短:代码重复最小化,通过不同的参数声明实现丰富功能,Bug 更少
- 健壮:生产级别的代码,还有自动交互文档
- 标准:完全兼容并基于 API 开放标准:OpenAPI 和 JSON Schema
缺点
由于 FastAPI 相对较新,因此与其他框架相比,社区较小,第三方的教程相对较少。
用例
FastAPI 适用于构建高性能的 API,本身支持异步,如果要构建异步 API,可以优先选择 FastAPI。Netflix 将其用于内部危机管理。它还可以在部署准备就绪的机器学习模型时完美缩放,因为当 ML 模型封装在 REST API 并部署在微服务中时,它在生产中会发挥最佳作用。
特性
FastAPI 特性
FastAPI 提供了以下内容:
基于开放标准
- 用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。
- 使用 JSON Schema (因为 OpenAPI 本身就是基于 JSON Schema 的)自动生成数据模型文档。
- 经过了缜密的研究后围绕这些标准而设计。并非狗尾续貂。
- 这也允许了在很多语言中自动生成客户端代码。
自动生成文档
交互式 API 文档以及具探索性 web 界面。因为该框架是基于 OpenAPI,所以有很多可选项,FastAPI 默认自带两个交互式 API 文档。
- Swagger UI,可交互式操作,能在浏览器中直接调用和测试你的 API 。
- 另外的 API 文档:ReDoc
更主流的 Python
全部都基于标准的 Python 3.6 类型声明(感谢 Pydantic )。没有新的语法需要学习。只需要标准的 Python 。
如果你需要2分钟来学习如何使用 Python 类型(即使你不使用 FastAPI ),看看这个简短的教程:Python Types。
编写带有类型标注的标准 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)
Info**second_user_data
意思是:
直接将second_user_data
字典的键和值直接作为key-value参数传递,等同于:User(id=4, name="Mary", joined="2018-11-30")
编辑器支持
整个框架都被设计得易于使用且直观,所有的决定都在开发之前就在多个编辑器上进行了测试,来确保最佳的开发体验。
在最近的 Python 开发者调查中,我们能看到 被使用最多的功能是"自动补全"。
整个 FastAPI 框架就是基于这一点的。任何地方都可以进行自动补全。
你几乎不需要经常回来看文档。
在这里,你的编辑器可能会这样帮助你:
- PyCharm 中: