首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FastAPI中设置响应类?

如何在FastAPI中设置响应类?
EN

Stack Overflow用户
提问于 2020-10-17 22:49:18
回答 1查看 3K关注 0票数 1

使用奥尔森序列化响应对fastAPI restful服务的速度有显著的影响,特别是对于非常大的对象。正如我在官方文档中所看到的,我们可以直接使用响应类作为api方法的参数。问题是,当我将ORJSONResponse直接作为一个函数使用时,它可以工作;但是,当将它传递给参数esponse_class=ORJSONResponse时,它不能工作。

1.直接调用ORJSONResponse()的示例代码

此代码运行在75 MB中,大小为6.6MB的显示orjson序列化正常工作。它比.net内核更快,这正是我所需要的。

代码语言:javascript
复制
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作为参数的示例代码:

这段代码在没有响应类集的情况下运行。在相同的6.6MB大小下,它所需的876 ms要长10倍以上。它显示orjson没有被正确设置。

代码语言:javascript
复制
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

测试平台

  • 测试客户端: ansomnia 2020.4.1,在postman 7.34.0中的结果相同
  • 操作系统: MacOS catalina 10.15.7,windows 10的结果相同
  • cpu:核心i9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 23:49:40

此外,我们还有直接返回响应的文档。

所以你可以用这个,不坏的练习。

代码语言:javascript
复制
return ORJSONResponse(content=data)

但是这将跳过验证、序列化和自动文档,这将为您提供巨大的灵活性和性能,但这也意味着您需要确保内容已经就绪,并且需要手动设计OpenAPI模式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64408092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档