在 HTTP 请求中,查询参数(Query Parameters) 和 表单参数(Form Data) 是两种不同的参数传递方式,主要区别如下:
位置:附加在 URL 后面,以 ? 开头,key=value 形式,多个参数用 & 连接。
示例:
GET /deleteDocument?id=123&name=test
特点:
通常用于 GET 请求(但 DELETE、POST 等也可以使用)。
参数直接暴露在 URL 中,适合简单、非敏感数据(如分页、过滤条件)。
在 FastAPI 中,使用 Query(...) 接收:
python
@app.delete("/deleteDocument")
async def delete_doc(id: int = Query(...)):
...
前端发送方式(以 axios 为例):
javascript
await axios.delete("/deleteDocument", { params: { id: 123 } });
位置:放在 HTTP 请求的 Body 中,格式为 application/x-www-form-urlencoded(默认)或 multipart/form-data(文件上传)。
示例:
POST /deleteDocument
Content-Type: application/x-www-form-urlencoded
id=123&name=test
特点:
主要用于 POST、PUT、DELETE 等请求,适合提交数据(尤其是敏感信息)。
不会暴露在 URL 上,比查询参数更安全。
在 FastAPI 中,使用 Form(...) 接收:
python
@app.delete("/deleteDocument")
async def delete_doc(id: int = Form(...)):
...
前端发送方式(以 axios 为例):
javascript
const formData = new FormData();
formData.append("id", "123");
await axios.delete("/deleteDocument", { data: formData });
或者:
javascript
await axios.delete("/deleteDocument", { data: "id=123" });
| 特性 | 查询参数(Query) | 表单参数(Form Data) |
|---|---|---|
| 位置 | URL 末尾(?id=123) |
HTTP 请求 Body |
| 可见性 | 暴露在 URL 中 | 不可见(更安全) |
| 适用请求方法 | GET、DELETE 等 |
POST、PUT、DELETE 等 |
| 数据大小限制 | 受 URL 长度限制(通常 2048 字符) | 无严格限制(适合大数据) |
| 适用场景 | 简单参数(如分页、搜索) | 表单提交、敏感数据 |
| FastAPI 接收方式 | Query(...) |
Form(...) |
GET 请求(如 /search?q=keyword)。id、page)。POST/DELETE 请求,提交数据(如登录表单、删除操作)。python
from fastapi import Query
@app.delete("/deleteDocument")
async def delete_doc(id: int = Query(...)):
return {"status": "ok", "id": id}
前端调用:
javascript
await axios.delete("/deleteDocument", { params: { id: 123 } });
python
from fastapi import Form
@app.delete("/deleteDocument")
async def delete_doc(id: int = Form(...)):
return {"status": "ok", "id": id}
前端调用:
javascript
const formData = new FormData();
formData.append("id", "123");
await axios.delete("/deleteDocument", { data: formData });
GET 请求。POST/DELETE 请求提交数据。Query() 和 Form() 接收。如果你的 DELETE 请求只是传递一个 id,查询参数更简单;如果涉及复杂数据(如密码、文件),表单参数更合适。