如何在 FastAPI 中设置响应 class?
How to set response class in FastAPI?
使用orjson to serializing response has a remarkable effect on the speed of fastAPI restful services, specifically for very big objects. As I have read in the official documentation,我们可以直接使用响应class作为api方法的参数。问题是,当我直接将 ORJSONResponse
作为函数使用时,它起作用了;但是,将其传递给参数 esponse_class=ORJSONResponse
.
时不起作用
1。直接调用 ORJSONResponse()
:
的示例代码
此代码 运行 75ms 大小 6.6 MB 表明 orjson 序列化工作正常。
它比 .net core 更快,这正是我需要的。
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist"))
def plan_list():
ORJSONResponse(ret)
2。将 ORJSONResponse
作为参数传递的示例代码:
此代码 运行 就像没有设置响应 class 一样。在 6.6MB 大小相同的情况下,它需要 876 毫秒 10 倍多的时间。它显示 orjson
没有正确设置。
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist",response_class=ORJSONResponse)
def plan_list():
for i in range(0,siz-1):
ret[i]=i
return ret
Test platform
- Test client: ansomnia core 2020.4.1, same results in postman 7.34.0
- Os: MacOS catalina 10.15.7, same results for windows 10
- cpu: core i9
此外,我们还有 Returning a Response Directly 的文档。
所以你可以使用这个,不是一个坏习惯。
return ORJSONResponse(content=data)
但这将跳过验证、序列化和自动文档,这将为您提供巨大的灵活性和性能,但这也意味着,您需要确保内容已准备就绪,并且您需要手动设计 OpenAPI 模式。
使用orjson to serializing response has a remarkable effect on the speed of fastAPI restful services, specifically for very big objects. As I have read in the official documentation,我们可以直接使用响应class作为api方法的参数。问题是,当我直接将 ORJSONResponse
作为函数使用时,它起作用了;但是,将其传递给参数 esponse_class=ORJSONResponse
.
1。直接调用 ORJSONResponse()
:
的示例代码
此代码 运行 75ms 大小 6.6 MB 表明 orjson 序列化工作正常。 它比 .net core 更快,这正是我需要的。
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist"))
def plan_list():
ORJSONResponse(ret)
2。将 ORJSONResponse
作为参数传递的示例代码:
此代码 运行 就像没有设置响应 class 一样。在 6.6MB 大小相同的情况下,它需要 876 毫秒 10 倍多的时间。它显示 orjson
没有正确设置。
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist",response_class=ORJSONResponse)
def plan_list():
for i in range(0,siz-1):
ret[i]=i
return ret
Test platform
- Test client: ansomnia core 2020.4.1, same results in postman 7.34.0
- Os: MacOS catalina 10.15.7, same results for windows 10
- cpu: core i9
此外,我们还有 Returning a Response Directly 的文档。
所以你可以使用这个,不是一个坏习惯。
return ORJSONResponse(content=data)
但这将跳过验证、序列化和自动文档,这将为您提供巨大的灵活性和性能,但这也意味着,您需要确保内容已准备就绪,并且您需要手动设计 OpenAPI 模式。