英文原版文档: 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 FastAPIapp = 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 --reloadINFO: 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 FastAPIfrom pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strprice: floatis_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]。
