Hello! 欢迎来到小浪资源网!



FastAPI中如何自定义Swagger响应的媒体类型?


FastAPI中如何自定义Swagger响应的媒体类型?

fastapi 设置 swagger response 的 media_type

在使用 fastapi 框架开发 restful api 时,我们需要根据接口的响应内容设置适当的媒体类型(media_type),以便客户端能够正确解析和处理响应。对于返回图像流的接口,需要将 media_type 设置为 “image/jpg” 或相应的图像类型,以告知客户端返回的内容类型。

然而,对于使用默认响应类的接口(如返回 json 的接口),fastapi 会自动在响应头中设置 “content-type”,无需显式声明 media_type。

不过,对于返回自定义响应类的接口,我们可以使用 “media_type” 属性来指定响应的媒体类型。例如,以下代码演示了如何设置自定义响应类的媒体类型为 “image/jpeg”:

from fastapi import FastAPI from fastapi.responses import StreamingResponse  app = FastAPI()  class MyCustomResponse(StreamingResponse):     media_type = "image/jpeg"  @app.get("/img", response_class=MyCustomResponse) def image():     def iterfile():         with open("./image.jpg", mode="rb") as file_like:             yield from file_like      return MyCustomResponse(iterfile())

上述代码中,”mycustomresponse” 类继承自 fastapi 提供的 “streamingresponse” 类,并重写了 “media_type” 属性,将其设置为 “image/jpeg”。通过将 “mycustomresponse” 作为 “image” 接口的 “response_class”,可以确保返回的图像流响应带有正确的媒体类型。

通过这种方式,我们可以自定义 swagger response 的 media_type,确保客户端能够准确地处理返回的各种响应类型的 api 接口。

相关阅读