[英]How to set response class in FastAPI?
使用orjson序列化響應對fastAPI RESTful服務的速度有顯着影響,特別是對於非常大的對象。 正如我在官方文檔中看到的,我們可以直接使用響應類作為 api 方法的參數。 問題是,當我直接將ORJSONResponse
用作函數時,它會起作用; 但是,將其傳遞給參數esponse_class=ORJSONResponse
時它esponse_class=ORJSONResponse
。
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)
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.