簡體   English   中英

如何在 FastAPI 中設置響應類?

[英]How to set response class in FastAPI?

使用orjson序列化響應對fastAPI RESTful服務的速度有顯着影響,特別是對於非常大的對象。 正如我在官方文檔中看到的,我們可以直接使用響應類作為 api 方法的參數。 問題是,當我直接將ORJSONResponse用作函數時,它會起作用; 但是,將其傳遞給參數esponse_class=ORJSONResponse時它esponse_class=ORJSONResponse

1. 直接調用ORJSONResponse()示例代碼:

這個代碼在75ms運行,大小6.6 MB昭示着orjson系列化工作正常。 它比 .net 核心更快,這正是我所需要的。

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 毫秒的時間超過 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

測試平台

  • 測試客戶端:ansomnia core 2020.4.1,postman 7.34.0結果相同
  • 操作系統:MacOS catalina 10.15.7,Windows 10 結果相同
  • 處理器:酷睿i9

此外,我們還有直接返回響應的文檔。

所以你可以使用這個,這不是一個壞習慣。

return ORJSONResponse(content=data)

但這將跳過驗證、序列化和自動文檔,這將為您提供巨大的靈活性和性能,但這也意味着,您需要確保內容已准備好,並且您需要手動設計 OpenAPI 模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM