FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。有如下几个关键特性:
- 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
- 高效编码:提高功能开发速度约 200% 至 300%。*
- 更少 bug:减少约 40% 的人为(开发者)导致错误。*
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
安装依赖
- 安装fastapi
bash
pip install fastapi
- 安装uvicorn
python
pip install uvicorn
示例
创建一个main.py
并写入如下内容:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/home")
async def home():
return {"home": "ok"}
@app.get("/items/{item_id}")
async def items(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id}
然后,我们可以通过以下命令来运行:
bash
# app为fastapi实例名
uvicorn main:app --reload
又或者这样,我们修改一下代码:
python
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/home")
async def home():
return {"home": "ok"}
@app.get("/items/{item_id}")
async def items(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)
然后我们直接运行main.py
文件即可!
等服务起来之后,我们可以在浏览器中访问http://localhost:8000/home
,将会有如下返回:
json
{
"home": "ok"
}
另外,我们访问http://127.0.0.1:8000/docs
会看到交互式的API文档(由SWAGGER UI生成)。或者访问http://127.0.0.1:8000/redoc
,你会看到另一个自动生成的文档(由 ReDoc 生成)
操作
这里的「操作」指的是一种 HTTP「方法」。在fastapi
中支持的HTTP方法有:
- POST: 创建数据
- GET: 读取数据
- PUT: 更新数据
- DELETE: 删除数据
比较常用的有这4种操作,当然fastapi
也支持其他几种少见的HTTP方法:
- OPTIONS
- HEAD
- PATCH
- TRACE
在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。
我们可以使用FastAPI
的实例来访问这些操作,如下:
python
@app.get("/")
async def get_action():
pass
@app.post("/")
async def post_action():
pass
@app.delete("/")
async def delete_action():
pass
@app.put("/")
async def put_action():
pass
函数的返回可以是一个dict
、list
,也可以是像str
、int
一样的单个值,等等。
你还可以返回Pydantic
模型(稍后你将了解更多)。