7 理解FastAPI的核心概念之请求与响应
在深入 FastAPI 之前,理解其核心概念是十分重要的。本篇文章将重点介绍请求与响应的内容,这是 web 应用程序通信的基础。前两篇内容中,我们安装并配置了 Uvicorn
,以及在后续篇章中将讨论 ASGI
与 WSGI
的关系。现在,我们将专注于请求与响应的细节。
FastAPI中的请求
在 FastAPI 中,用户的请求通常包含以下几个部分:
- 请求方法:指定如何与资源交互,常见请求方法有
GET
、POST
、PUT
、DELETE
等。 - 请求路径:请求的 URL。
- 请求体:
POST
或PUT
请求通常包含请求体,其中可以携带数据。 - 请求头:元信息,例如内容类型 (
Content-Type
)、授权信息等。
示例:处理 GET 请求
首先,让我们看一个简单的案例,演示如何处理 GET
请求。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
在这个示例中,当用户发送一个 GET
请求到路径 /items/123?q=test
时,item_id
将被提取为 123
,同时查询参数 q
的值为 test
。FastAPI 通过路径参数和查询参数自动解析请求。
FastAPI中的响应
请求处理完后,FastAPI 会返回响应。响应一般包含状态码、响应体、响应头等信息。
常用的响应类型
- JSON响应:默认的返回形式
- HTML响应:返回HTML内容
- 文件响应:返回文件下载
示例:返回JSON响应
继续我们的示例,快速看看如何返回一个 JSON 响应:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {
"item_id": item_id,
"message": "Item fetched successfully."
}
当此请求成功时,响应的内容将是 JSON 格式,API 用户将收到如下响应:
{
"item_id": 123,
"message": "Item fetched successfully."
}
返回不同类型的响应
我们也可以返回不同类型的响应,例如返回 HTML 内容:
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/html", response_class=HTMLResponse)
async def get_html():
return "<html><body><h1>Hello, World!</h1></body></html>"
访问 /html
路径时,将会得到一个简单的 HTML 页面。
自定义响应
我们可以使用 JSONResponse
类来自定义响应,来设置状态码或特殊的响应数据格式:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/custom-response")
async def custom_response():
content = {"data": "This is a custom response"}
return JSONResponse(content=content, status_code=200)
这里我们使用 JSONResponse
结合自定义内容,并返回了状态码为 200
的响应。
请求与响应的示例整合
以下是一个更复杂的例子,它展示了如何同时处理请求和生成响应。我们通过 POST
请求添加新项目,并用 GET
请求获取项目列表:
from fastapi import FastAPI, HTTPException
from typing import List
app = FastAPI()
items = []
@app.post("/items/", response_model=dict)
async def create_item(item: dict):
items.append(item)
return {"message": "Item added", "item": item}
@app.get("/items/", response_model=List[dict])
async def read_items():
return items
在此案例中,我们使用 POST
请求将项目添加到 items
列表,并用 GET
请求获取所有项目的列表。
总结
掌握请求与响应的流程是使用 FastAPI 开发网络应用的重要一步。在本篇文章中,我们探讨了如何接收请求、处理参数、以及如何返回响应。理解和熟练使用这些基本概念将为你后续学习 ASGI
和 WSGI
奠定良好的基础。
希望这一篇关于请求与响应的讨论能够帮助你更好地理解 FastAPI,并在开发中应用这些关键概念!接下来,我们将讨论更深层次的内容:ASGI
与 WSGI
的区别及各自的应用场景。