英文原版文档: https://fastapi.tiangolo.com
源代码: https://github.com/tiangolo/fastapi
FastAPI是基于python3.6+和标准python类型的一个现代化的,快速的(高性能),构建api的web框架。
这是他的特点关键词:
- Fast: 非常高的性能,媲美nodejs和go。可用的最快的Python框架之一.
- Fast to Code 增加了200%~300%开发功能的速度
- Fewer Buys 减少了40%的人为开发错误
- Intuitive 伟大的编辑支持。减少了debug时间。
- Easy 简单的使用和学习设计,减少了阅读文档的时间。
- Short 减少代码重复,每个参数声明的多个特性,更少的错误。
- Robust 获得生产就绪代码。自动交互文档。
Standards-based 基于开放的标准API: OpenAPI和JSON Schema
意见
Typer, FastAPI的Cli
如果你创建了一个CLI应用在终端使用代替一个web api,检查Typer.Typer是FastAPI的子集。它是CLIs的FastAPI。⌨️🚀
Requirements
Python 3.6+
FastAPI 站在巨人的肩膀上:Starlette 提供web部分。
Pydantic 提供数据部分。
安装
pip install fastapi
你也将需要一个ASGI服务器,在生产环境中使用例如Uvicorn.
pip install uvicorn
举例
创建它
创建一个
main.py
文件:from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
启动它
终端运行: uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [1969]
INFO: Started server process [1971]
INFO: Waiting for application startup.
INFO: Application startup complete.
检查它
打开浏览器,地址栏输入:http://127.0.0.1:8000/items/5?q=somequery.
你会看到一个json响应对象:{"item_id": 5, "q": "somequery"}
你已经创建了一个API:
通过路径
/
和/items/{item_id}
接收HTTP请求。- 两个路径使用
GET
操作。 - 路径
/items/{item_id}
有一个路径参数item_id
并且是个int
。 路径
/items/{item_id}
有一个可操作性的str
查询参数q
.交互式的API文档
现在浏览器进入 http://127.0.0.1:8000/docs。
替代API文档
现在,浏览器进入http://127.0.0.1:8000/redoc.
你将看到替代的自动文档.
举例升级
现在修改
main.py
文件来从一个PUT
请求中接收数据。
使用python标准类型来声明主体,感谢Pydantic
.from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
服务器会自动的重启(因为你添加了
--reload
参数给上面的uvicorn
)。交互式API文档更新
交互式文档会被自动更新,包含了新的部分。
- 点击”Try it out”按钮,它允许你填充参数并且直接的与API交互。
- 然后点击”Execute”按钮,用户接口会连接你的API,发送参数,获取结果显示到屏幕上。
替换API文档的更新
现在,进入 http://127.0.0.1:8000/redoc.
- 这个替换文档也将会显示新的查询参数和请求体。
要点总结
总之,只需将参数、主体等类型声明为函数参数。
使用标准的现代Python类型就可以做到这一点。 您不必学习新的语法、特定库的方法或类,等等。
只要标准的Python 3.6+。
性能
独立的TechEmpower基准测试显示,在Uvicorn下运行的FastAPI应用程序是可用的最快的Python框架之一,仅低于Starlette和Uvicorn本身(由FastAPI内部使用)。
要更多地了解它,请参阅基准测试一节.
可选依赖
使用Pydantic:
ujson
- 为了更快的JSON解析email_validator
- 为了邮件验证
使用Starlette:
requests
- 使用TestClient
.aiofiles
- 使用FileResponse
或者StaticFiles
.jinja2
- 默认的模板配置.python-mutipart
- 需要使用request.form()进行解析.itsdangerous
- 需要SessionMiddlerware
支持.pyyaml
- 需要Starlette的SchemaGenerator
支持.graphene
- 需要GraphQLApp
支持.ujson
- 如果你想要使用UJSONResponse
。
使用FastAPI/Starlette:
uvicorn
- 使服务器加载并运行你的应用。orjson
- 如果你想要使用UJSONResponse
.
你可以安装他们通过pip install fastapi[all]
。