Skip to content

路由与 HTTP 方法 ​

路由是“方法 + 路径 + 处理函数” ​

同一个路径可以对应不同操作。例如:

方法和路径常见含义
GET /todos读取任务列表
POST /todos创建任务
GET /todos/3读取 3 号任务
PUT /todos/3按接口约定完整替换 3 号任务
PATCH /todos/3修改 3 号任务的部分字段
DELETE /todos/3删除 3 号任务

HTTP 方法表达约定的语义。FastAPI 不会因为你写了 DELETE 就自动删除数据库记录,实际工作仍由函数完成。官方路径操作说明

完整示例:同一路径对应不同方法 ​

python
from fastapi import FastAPI

app = FastAPI()


@app.get("/books")
def list_books():
    return [{"id": 1, "title": "Python 基础"}]


@app.post("/books", status_code=201)
def create_book():
    return {"id": 2, "title": "FastAPI 入门"}

这个示例只是演示路由,POST 没有实际保存数据。浏览器地址栏通常只能方便地发 GET;测试 POST 时请用 /docs。

固定路径放在动态路径前 ​

以下是追加到本章 main.py 的示例:

python
@app.get("/users/me")
def current_user():
    return {"name": "当前用户"}


@app.get("/users/{user_id}")
def read_user(user_id: int):
    return {"user_id": user_id}

路由按登记顺序匹配。先登记 /users/{user_id} 时,/users/me 可能进入动态路由,再因 me 不是整数而校验失败。更具体的固定路径应先登记。官方路由顺序说明

路径命名习惯 ​

优先使用表达资源的名词,例如 /books、/users;用方法表示操作。项目内部保持一致:是否使用复数、是否带结尾 /、是否有 /api/v1 前缀。

FastAPI 默认常会把缺少或多出的结尾斜杠重定向到已登记的路径。不要依赖客户端碰巧支持重定向来弥补接口命名混乱。

幂等先建立直觉 ​

幂等可以理解为:相同操作重复执行,预期的最终资源状态相同。例如删除同一个任务两次,最终都应该是任务已删除。

它不要求每次响应都完全相同:第一次删除可返回 204,第二次可能返回 404。创建操作通常可能产生重复资源,实际业务中可以引入幂等键。

本章练习 ​

为图书系统设计列表、详情、创建、修改、删除五类接口。

过关标准:能根据业务选择 HTTP 方法,能解释 PUT 与 PATCH 的常见区别。