[flask]统一API响应格式

简介: [flask]统一API响应格式

前言

在设计API返回内容时,通常需要与前端约定好API返回响应体内容的格式。这样方便前端进行数据反序列化时相应的解析处理,也方便其它服务调用。不同公司有不同的响应内容规范要求,这里以常见的JSON响应体为例:

{
    "code": 200,
    "data": {
        "content": "this is /a/1"
    },
    "msg": "success"
}

code字段

code状态码主要用于表示错误类型区间状态码。如果设计比较简单,可以直接使用HTTP的状态码。如果是一个大型系统,也可以设计一套自定义的状态码。比如:

from enum import Enum
class BizStatus(Enum):
    # custom status code
    OK = 200
    BadRequestA1 = 4001  # 请求参数异常-A情况
    BadRequestA2 = 4002  # 请求参数异常-B情况

message字段

message 字段是对当前 code 状态码错误明细的补充说明。通常不同的code状态码会有不同的message描述信息。

data字段

data 值通常代表返回的响应体内容。

示例代码

以下代码定义了一个JSON响应类,api在返回的时候需要引用这个响应类。除此之外,还对404和一般异常做了统一处理,当出现这两类异常时,也会返回JSON结构的响应体。

from flask import Flask, request, jsonify, make_response
from http import HTTPStatus
API_KEY_SVCA = "flask_unify_response"
app = Flask(__name__)
class JsonResponse:
    """A class to represent a JSON response."""
    def __init__(
        self, code: HTTPStatus = HTTPStatus.OK, msg: str = "success", data=None
    ):
        self.code = code
        self.msg = msg
        self.data = data
    def to_dict(self):
        return {
            "code": self.code.value,
            "msg": self.msg,
            "data": self.data,
        }
    def to_json(self):
        return jsonify(self.to_dict())
    def response(self):
        response = make_response(self.to_json(), self.code.value)
        response.headers["Content-Type"] = "application/json"
        return response
@app.errorhandler(404)
def error_handler_not_found(error):
    req_method = request.method
    req_path = request.path
    return JsonResponse(
        code=HTTPStatus.NOT_FOUND,
        msg=f"{req_method} {req_path} Not Found",
    ).response()
@app.errorhandler(Exception)
def error_handler_generic(error):
    req_method = request.method
    req_path = request.path
    return JsonResponse(
        code=HTTPStatus.INTERNAL_SERVER_ERROR,
        msg=f"Internal Server Error. {req_method} {req_path}",
        data={"error": str(error)},
    ).response()
@app.get("/a/1")
def apitest_a1():
    return JsonResponse(
        code=HTTPStatus.OK, msg="success", data={"content": "this is /a/1"}
    ).response()
@app.get("/a/2")
def apitest_a2():
    raise Exception("exception in a/2")
if __name__ == "__main__":
    app.run(host="127.0.0.1", port=8001)

客户端请求测试:

$ curl -s http://127.0.0.1:8001/a/1 | python3 -m json.tool
{
    "code": 200,
    "data": {
        "content": "this is /a/1"
    },
    "msg": "success"
}
$ curl -s http://127.0.0.1:8001/a/2 | python3 -m json.tool
{
    "code": 500,
    "data": {
        "error": "exception in a/2"
    },
    "msg": "Internal Server Error. GET /a/2"
}
$ curl -s http://127.0.0.1:8001/a/3 | python3 -m json.tool
{
    "code": 404,
    "data": null,
    "msg": "GET /a/3 Not Found"
}
相关文章
|
2月前
|
人工智能 缓存 搜索推荐
5G时代电商API的实时响应需求
5G技术推动电商API性能飞跃,实现毫秒级响应,提升用户体验与业务效率。本文解析5G赋能机制、实时响应动因、挑战与优化策略,助力电商把握5G红利,迈向智能高效新时代。
59 1
|
2月前
|
监控 API 开发者
淘宝店铺商品API响应数据解析
淘宝店铺商品API是淘宝开放平台的核心接口,支持开发者高效获取店铺内全部商品信息,广泛应用于电商数据分析、竞品监控等场景。相比人工采集,效率提升90%以上。接口支持商品列表查询、多维度筛选、多种排序方式,并可结合其他接口获取扩展信息。本文提供Python请求示例,完整实现签名生成、参数构造和异常处理。
|
2月前
|
数据采集 JSON API
1688商品详情API响应数据解析
1688商品详情API支持获取商品基础信息、价格、库存、图片及商家数据,适用于选品分析与市场研究。提供标准化JSON数据格式,提升电商数据采集效率。需配置商品ID等参数,示例代码展示Python调用方式。
|
2月前
|
搜索推荐 API 开发者
京东商品列表API响应数据解析
京东商品列表API是京东开放平台的核心接口,支持开发者批量获取商品数据,适用于市场调研、竞品分析、推荐系统等场景。接口支持关键词搜索、分类筛选、价格区间等参数配置,返回商品名称、价格、销量、库存等信息,并具备高并发、实时更新等特性。
|
2月前
|
JSON API 开发者
京东商品评论API响应数据解析
京东商品评论API(JD.item_review)助力开发者获取商品评论数据,如内容、评分、时间等,支持Python调用,适用于商品分析与用户研究。
|
2月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。
|
2月前
|
JSON 自然语言处理 API
闲鱼商品详情API响应数据python解析
闲鱼商品详情API(goodfish.item_get)通过商品ID获取标题、价格、描述、图片等信息,支持Python等多语言调用。本文提供Python请求示例,包含请求构造与数据处理方法。
|
2月前
|
JSON 搜索推荐 API
小红书笔记详情API响应数据解析
小红书开放平台提供笔记详情API,支持获取笔记内容、互动数据及用户信息,适用于品牌营销与市场分析。接口支持HTTP GET/POST请求,返回JSON格式数据。需申请权限并替换参数如note_id与access_token。附Python请求示例,建议添加异常处理。
|
2月前
|
供应链 监控 API
亚马逊商品详情API响应数据解析
本教程介绍如何使用亚马逊商品详情API(如Product Advertising API或SP-API),通过ASIN或关键词查询商品信息。支持获取价格、库存、评价等50多个字段,适用于价格监控、竞品分析和供应链管理。提供Python请求示例代码,实现商品数据安全高效获取。
|
2月前
|
JSON API 数据格式
速卖通商品列表API响应数据解析
速卖通商品列表API支持通过关键词、分类、价格等条件批量获取商品数据,适用于比价、爆款挖掘等场景。提供HTTP GET/POST请求方式,返回JSON格式数据,支持分页与多字段排序。

热门文章

最新文章