【FastAPI 學習 五】統一響應json數據格式


統一響應json數據格式

本系列博客是配合Vue開發一套后台管理系統,對應的Vue教程見個人博客

https://www.charmcode.cn/

現在了很多項目,都是前后端分離的項目,所以了前后端都會約定傳輸的數據格式,以及響應提醒。

響應json格式

現在應該都是使用的json交互了,應該沒有使用xml的吧?
一般了響應json格式是由以下三個字段組成。

{
 "code": 200,   // 統一成功狀態碼 前后端約定 有的是0 有的是20000
 "data": xxx,   // 可以是任意類型數據 有接口文檔對接
 "message": "success"  // 消息提示,是狀態碼的簡要補充說明
}

前端一般都會做個響應攔截處理,如果狀態碼不是約定成功的狀態碼就攔截,然后提示message里面的消息,是的話就返回data里面的數據。

封裝響應格式

我在utils/response_code.py 工具文件夾下,創建了一個response_code.py文件
專門存放封裝的響應數據格式。

from fastapi import status
from fastapi.responses import JSONResponse, Response  # , ORJSONResponse
from typing import Union

# 注意有個 * 號 不是筆誤, 意思是調用的時候要指定參數 e.g.resp_200(data=xxxx)
def resp_200(*, data: Union[list, dict, str]) -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 200,
            'message': "Success",
            'data': data,
        }
    )
    
def resp_400(*, data: str = None, message: str="BAD REQUEST") -> Response:
    return JSONResponse(
        status_code=status.HTTP_400_BAD_REQUEST,
        content={
            'code': 400,
            'message': message,
            'data': data,
        }
    )

# 所有響應狀態都封裝在這里
xxxx

調用

調用就很簡單了, 導入調用就行了。

from api.utils import response_code

@router.get("/table/list")
async def get_table_list():
    return response_code.resp_200(data={
    "items":  ["xx", "xx"]
    })

一些補充

我上面用的序列化的工具方法JSONResponse 是框架自帶的,作者還在文檔里面補充說明了, 如何調用其他的序列化方法,更快的去序列化json數據。
ORJSONResponse UJSONResponse 等方法
這些是要在額外安裝依賴庫的

可以參見文檔
https://fastapi.tiangolo.com/advanced/custom-response/#ujsonresponse

本文GitHub地址

https://github.com/CoderCharm/fastapi-mysql-generator/blob/master/{{cookiecutter.project_name}}/app/common/response_code.py

見個人博客: https://www.charmcode.cn/article/2020-07-16_fastapi_response_json


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM