通过FastAPI开发流式接口——简单demo演示

FastAPI 的内置 /docs 页面无法直接测试流式接口,但你可以使用工具如 curl 或 Postman,或者创建简单的前端页面来处理流式响应。

 

FastAPI 本身完全支持开发流式接口,虽然其内置的 Swagger 文档(/docs)不支持直接测试流式响应,但这并不会影响使用 FastAPI 开发和运行流式接口。

你仍然可以通过 StreamingResponse 或者使用异步生成器来构建和提供流式接口。

以下是 FastAPI 中开发流式接口的几个要点:

1. 使用 StreamingResponse 构建流式接口

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import time
import asyncio

app = FastAPI()

# 模拟异步生成器返回流式数据
async def generate_data():
    for i in range(10):
        yield f"Chunk {i}\n"  # 每次返回一小段数据
        await asyncio.sleep(1)  # 模拟延迟

# 创建流式接口
@app.get("/stream")
async def stream_data():
    return StreamingResponse(generate_data(), media_type="text/plain")

在这个例子中,/stream 接口会返回一个流式响应,每秒发送一个数据块(模拟的“Chunk”),客户端在每次接收到数据时就能立即处理,避免等待所有数据传输完毕。

 

2. 如何测试流式接口

  • curl 测试:

curl http://127.0.0.1:8000/stream
  • 运行该命令后,你会看到每隔一秒输出一次 Chunk X

  • PostmanInsomnia

    • 这些工具支持流式响应,你可以在界面上看到数据逐步返回。
  • 浏览器和前端应用

    • 使用 fetch() API 结合 ReadableStreamTextDecoder 可以轻松处理流式返回的数据。

3. 生产环境中的优势

  • 实时数据传输:如果你在开发涉及到需要长时间响应的接口(如文件下载、大数据处理、实时数据流等),流式接口能提高效率,避免用户等待所有数据处理完成后才得到响应。
  • 节省内存:流式传输能够避免将所有结果都加载到内存里,可以逐步处理和发送数据,适用于处理大文件或大数据集。

总结:

虽然 FastAPI 自带的 Swagger UI 不支持直接测试流式接口,但这不会影响开发流式接口。

通过 StreamingResponse 和异步生成器,FastAPI 提供了强大的流式处理功能,且可通过 curl、Postman、前端应用等方式轻松测试和使用流式接口。

 

posted @ 2024-09-19 13:51  AlphaGeek  阅读(1854)  评论(0)    收藏  举报