fastapi是高性能的web框架。他的主要特点是:
- 快速编码
- 减少人为bug
- 直观
- 简易
- 具有交互式文档
- 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON Schema。
技术背景:python3.6+、Starlette、Pydantic
安装
1 2
| pip install fastapi pip install uvicorn
|
quick start
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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}
|
或者
1 2 3 4 5 6 7 8 9 10 11 12 13
| from fastapi import FastAPI
app = FastAPI()
@app.get("/") async def read_root(): return {"Hello": "World"}
@app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
|
运行
1
| uvicorn main:app --reload
|
看到如下提示,证明运行成功
main: 表示app所在文件名
app:FastAPI实例
reload:debug模式,可以自动重启
试着请求http://127.0.0.1:8000/items/5?q=somequery
,会看到如下返回
1
| {"item_id": 5, "q": "somequery"}
|
交互文档
试着打开http://127.0.0.1:8000/docs
API文档
试着打开http://127.0.0.1:8000/redoc
update
通过上面的例子,我们已经用fastapi完成了第一个web服务,现在我们再添加一个接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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
。再次查看文档,发现同样发生了改变。
到此,你已经可以快速的用fastapi搭建起服务了~