FastAPI 中 StreamingResponse 类怎么使用?一文讲解

StreamingResponse 类是 FastAPI 中处理流式响应的强大工具,本文介绍了在 FastAPI 中使用 StreamingResponse 类的方法

用 Apifox,节省研发团队的每一分钟

FastAPI 中 StreamingResponse 类怎么使用?一文讲解

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

StreamingResponse 是 FastAPI 中的一个类,用于处理流式响应。它允许你将数据以流的形式发送给客户端,适用于处理大文件、实时日志等场景。本文将介绍在 FastAPI 中如何使用 StreamingResponse 类,包括常见场景、实践案例以及在 IDE 编辑器(如:vscode)中运行的步骤。

常见应用场景

StreamingResponse 允许在响应期间逐块发送数据,而不是等到整个响应数据准备好后再发送。


通常情况下,当响应数据较大或需要在处理时逐步生成时,使用 StreamingResponse 可以提供更高效的响应处理和减少内存消耗。


使用 StreamingResponse 可以实现以下场景:

  1. 大型文件下载:当需要下载大型文件时,使用 StreamingResponse 可以逐块地将文件数据发送给客户端,减少内存占用。
  2. 实时数据流:当需要实时将数据流式传输到客户端时,如实时日志或事件流,使用 StreamingResponse 可以逐块地发送数据并保持长连接。

使用 StreamingResponse

首先,确保你已经安装了 FastAPI。你可以通过以下命令使用 pip 安装 FastAPI:

pip install fastapi


接下来,我们将创建一个简单的 FastAPI 应用程序,并使用 StreamingResponse 类返回一个流式响应。请在你的 IDE 编辑器中创建一个名为 fastapi-stream.py 的文件,并将以下代码粘贴到其中:

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import io

app = FastAPI()

@app.get("/stream")
async def stream_response():
    data = b"hello world\n" * 20000
    stream = io.BytesIO(data)
    return StreamingResponse(stream, media_type="text/plain")

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="127.0.0.1", port=8000)


在上面的代码中,通过使用 io.BytesIO 创建了一个字节流对象 stream,并将其作为数据源传递给 StreamingResponse 对象。这个字节流对象 stream 包含了一个重复了 20000 次的 "hello world\n" 的字节数据。


通过返回 StreamingResponse(stream, media_type="text/plain"),FastAPI 将会逐个读取字节流中的数据块并将其返回给客户端。


这里的关键是将字节流对象作为数据源传递给 StreamingResponse。FastAPI 会从字节流中逐个读取数据块,并将每个数据块作为响应的一部分返回给客户端。客户端在接收到一个数据块后可以开始处理数据,而不需要等待整个响应的完成。


在这个示例中,FastAPI 会逐个读取字节流中的数据块(每个数据块是 "hello world\n"),然后将它们逐个返回给客户端。客户端在接收到每个数据块时可以立即处理数据,而不需要等待全部数据块的接收完成。

运行程序

要运行 FastAPI 应用程序,并测试 StreamingResponse 的功能,我们需要使用 uvicorn 这样的 ASGI 服务器。请确保你已经安装了 uvicorn。你可以通过以下命令使用 pip 安装它:

pip install uvicorn


在你的 IDE 编辑器中,打开终端并导航到存储 fastapi-stream.py 文件的目录。然后运行以下命令启动应用程序:

uvicorn fastapi-stream:app --reload


现在,你可以使用 HTTP 请求工具(如 cURL、Apifox 或浏览器插件)向 http://localhost:8000/stream 发送 GET 请求。你将能够在响应中看到按一秒钟间隔生成的数据。

使用 Apifox 调试 FastAPI 接口

Apifox 是一个集 API 文档、API 调试、API Mock和API 自动化测试于一体的 API 协作平台,我们可以通过 Apifox 来更方便的调试 FastAPI。

如果想快速的调试一条接口,新建一个项目后,在项目中选择“调试模式”,填写请求地址后即可快速发送请求,并获得响应结果,上文的实践案例如图所示:

FastAPI 中 StreamingResponse 类的使用
Apifox 调试 FastAPI 接口

总结

本文介绍了在 FastAPI 中使用 StreamingResponse 类的方法,在实践案例中,我们展示了一个简单的示例,其中生成了一系列的数据并将其以流的形式返回。


StreamingResponse 类是 FastAPI 中处理流式响应的强大工具,适用于处理大文件、实时日志等需要流式传输的场景。同时,使用 Apifox 进行接口调试,大大提高了项目的开发效率,图形化的操作界面也更加方便。

知识扩展

了解更多有关 FastAPI 的知识:

参考链接:

  • FastAPI 官网:https://fastapi.tiangolo.com/
  • FastAPI StreamingResponse 文档:https://fastapi.tiangolo.com/advanced/custom-response/?h=#streamingresponse