通过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。 -
Postman 和 Insomnia:
- 这些工具支持流式响应,你可以在界面上看到数据逐步返回。
-
浏览器和前端应用:
- 使用
fetch()API 结合ReadableStream或TextDecoder可以轻松处理流式返回的数据。
- 使用
3. 生产环境中的优势:
- 实时数据传输:如果你在开发涉及到需要长时间响应的接口(如文件下载、大数据处理、实时数据流等),流式接口能提高效率,避免用户等待所有数据处理完成后才得到响应。
- 节省内存:流式传输能够避免将所有结果都加载到内存里,可以逐步处理和发送数据,适用于处理大文件或大数据集。
总结:
虽然 FastAPI 自带的 Swagger UI 不支持直接测试流式接口,但这不会影响开发流式接口。
通过 StreamingResponse 和异步生成器,FastAPI 提供了强大的流式处理功能,且可通过 curl、Postman、前端应用等方式轻松测试和使用流式接口。

浙公网安备 33010602011771号