FastAPI 是由 Sebastián Ramírez 领衔开发的一款开发 Web API 的框架。以下内容基于 Patrick Loeber 写的教程 以及 FastAPI 官方教程 。
首先,我假设你已经安装了 conda 或者 miniconda。假设你现在有一个文件夹 fastapi
,第一步是建一个虚拟环境:
cd fastapi
conda create --name fastapi python=3.11
虚拟环境设置好之后,启动它并安装 FastAPI:
conda activate fastapi
# Use pip to install FastAPI with standard dependencies
pip install "fastapi[standard]"
在 fastapi
项目里创建 main.py
:
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q:Optional[str] = None):
return {"item_id": item_id, "q": q}
# order matters
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
# if you redefin a path operation, only the first one will be used.
@app.get("/users")
async def read_users():
return ["Rick", "Morty"]
@app.get("/users")
async def read_users2():
return ["Bean", "Elfo"]
然后在终端继续输入:
fastapi dev main.py
打开 http://127.0.0.1:8000
。这就是我们的 API 了。首先映入眼帘的是 message: "Hello World"
。
然后你依次试试以下地址:
- http://127.0.0.1:8000/items/4
- http://127.0.0.1:8000/items/4?q=sit
- http://127.0.0.1:8000/users/me
- http://127.0.0.1:8000/users/sit
- http://127.0.0.1:8000/users
这里有几个点需要说明:
如果你把
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
顺序换成
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
http://127.0.0.1:8000/users/me
的结果不再是 "user_id": "the current user"
,而是 "user_id": "me"
。这是因为当路径 (path) 相同时,fastapi 只匹配首个路径操作 (path operation)。也因此 http://127.0.0.1:8000/users
的结果是 ["Rick", "Morty"]
。
FastAPI 非常好的一点是它可以自动生成 API 文档:http://127.0.0.1:8000/docs
一切结束之后,关闭虚拟环境
conda deactivate
最后一次修改于 2024-09-01