FastAPI 入门教程

郝鸿涛 / 2024-09-01

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"

然后你依次试试以下地址:

这里有几个点需要说明:

如果你把

@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