FastAPI发送POST请求
FastAPI 是一个快速(高性能)的 Web 框架,用于构建 APIs,基于 Python 3.6+ 类型提示。它的设计理念是简单、灵活且高效,适用于构建 RESTful APIs 和微服务。在一些应用场景中,我们可能需要通过 FastAPI 发送 POST 请求,例如从一个 API 接收数据并将其转发到另一个 API。下面,我们将探讨如何使用 FastAPI 发送 POST 请求,并提供相应的代码示例。
安装 FastAPI 和 HTTPX
在开始之前,你需要确保安装了 FastAPI 和 HTTPX。HTTPX 是一个用于异步 HTTP 请求的库,与 FastAPI 的异步特性兼容良好。
pip install fastapi uvicorn httpx
创建基本的 FastAPI 应用
首先,我们需要创建一个基本的 FastAPI 应用。在这个应用中,我们将创建一个 /send
路径的 POST 接口,该接口接收数据并将其转发到另一个外部 API。
from fastapi import FastAPI
from fastapi import Request
import httpx
app = FastAPI()
@app.post("/send")
async def send_data(data: dict):
async with httpx.AsyncClient() as client:
response = await client.post("https://jsonplaceholder.typicode.com/posts", json=data)
return {
"status_code": response.status_code,
"response_data": response.json()
}
代码详解
- 导入依赖:
FastAPI
:用于创建 FastAPI 应用。Request
:用于处理请求。-
httpx
:用于发送异步 HTTP 请求。 -
创建 FastAPI 实例:
-
使用
FastAPI()
初始化应用。 -
定义 POST 路由:
- 使用
@app.post("/send")
装饰器定义一个 POST 路由,当访问/send
时会调用send_data
函数。 -
data: dict
表示请求体的数据将被解析为字典。 -
发送 POST 请求:
- 使用
httpx.AsyncClient
创建一个异步客户端。 - 使用
await client.post(...)
发送 POST 请求到外部 API,并将接收到的数据作为 JSON 发送。 - 返回外部 API 的响应状态码和响应数据。
测试接口
我们可以使用 curl
或 Postman 等工具来测试我们的 FastAPI 应用。运行 FastAPI 应用后(通常用命令 uvicorn main:app --reload
),发送 POST 请求到 /send
接口:
curl -X POST "http://127.0.0.1:8000/send" -H "Content-Type: application/json" -d '{"title": "foo", "body": "bar", "userId": 1}'
发送后,可以看到响应的状态码和响应数据。
异常处理
在实际应用中,发送网络请求时可能会出现异常,因此添加基本的异常处理是一个好习惯。可以修改 send_data
函数如下:
@app.post("/send")
async def send_data(data: dict):
async with httpx.AsyncClient() as client:
try:
response = await client.post("https://jsonplaceholder.typicode.com/posts", json=data)
response.raise_for_status() # 如果响应状态码不是 200,将引发 HTTPStatusError
except httpx.HTTPStatusError as exc:
return {"error": str(exc), "details": response.text}
except Exception as exc:
return {"error": str(exc)}
return {
"status_code": response.status_code,
"response_data": response.json()
}
结论
通过上述示例,我们能够使用 FastAPI 发送 POST 请求到外部 API。借助 HTTPX,异步操作变得简单而高效。为了确保应用的健壮性,添加适当的异常处理是非常必要的。希望这篇文章能帮助你更好地理解如何在 FastAPI 中发送 POST 请求及其应用场景。