RESTful 的 URL 与方法在 Flask 里是怎么落地的?尾部斜杠到底会怎样?静态路径和动态路径冲突谁赢?嵌套资源要注意什么?这篇用 test_client 把每个细节逐个验证。
POST /users/ → 201 /users/2 {"id":2,"name":"bob"}
PUT /users/2 {name} → 200 {"id":2,"name":"bobby"}
PATCH /users/2 {email} → 200 {"email":"b@x.test","id":2,"name":"bobby"}
再 PUT 一次(整体替换,email 没了)→ 200 {"id":2,"name":"bobby"}
DELETE /users/2 → 204 ''
再 DELETE 一次 → 204 (这个实现是幂等的:删不存在的也返回 204)
GET /users/2 → 404上一篇:API 版本控制;下一篇:Idempotency-Key。
DELETE /users/ → 405 | Allow: OPTIONS, GET, HEAD, POST OPTIONS /users/1 → 200 | Allow: GET, HEAD, PUT, PATCH, OPTIONS, DELETE HEAD /users/1 → 200 | 正文长度 0 | Content-Length 22
GET /users → 308 Location: http://localhost/users/ POST /users → 308 Location: http://localhost/users/ GET /users/ → 200 GET /ping → 200 GET /ping/ → 404
GET /users/me → {"me":true}
GET /users/ann → {"by_name":"ann"}
GET /users/1 → {"id":1,"name":"ann"} GET /items/12345678-1234-5678-1234-567812345678 → 200 {"i":"12345678-1234-5678-1234-567812345678","t":"UUID"}
GET /items/not-a-uuid → 404
GET /files/a/b/c.txt → 200 {"p":"a/b/c.txt"}
GET /users/1/posts/2 → 200 {"pid":2,"uid":1}
GET /users/x/posts/2 → 404 GET /v/users/1/posts/5 → 200 GET /v/users/2/posts/5 → 404
POST 两次:用户数 1 → 3(多了 2 条) PUT /users/50 两次:第一次后 4,第二次后 4(没有再增加)