zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    AngularJS之页面跳转Route
    ajax上传图片的本质
    JQuery-基础学习1
    Java跨域问题的处理详解
    红黑树
    查找算法
    八大排序算法
    linux下安装nginx
    libevent 和 libev 提高网络应用性能
    Linux下libevent安装与示例
  • 原文地址:https://www.cnblogs.com/CharmCode/p/14191093.html
Copyright © 2011-2022 走看看