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()
    }

代码详解

  1. 导入依赖
  2. FastAPI:用于创建 FastAPI 应用。
  3. Request:用于处理请求。
  4. httpx:用于发送异步 HTTP 请求。

  5. 创建 FastAPI 实例

  6. 使用 FastAPI() 初始化应用。

  7. 定义 POST 路由

  8. 使用 @app.post("/send") 装饰器定义一个 POST 路由,当访问 /send 时会调用 send_data 函数。
  9. data: dict 表示请求体的数据将被解析为字典。

  10. 发送 POST 请求

  11. 使用 httpx.AsyncClient 创建一个异步客户端。
  12. 使用 await client.post(...) 发送 POST 请求到外部 API,并将接收到的数据作为 JSON 发送。
  13. 返回外部 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 请求及其应用场景。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部