繁体   English   中英

如何在Flask API中返回一个通用的JSON对象?

[英]How can I return a common JSON object in my flask API?

我正在构建一个返回JSON字符串的API。 但是,我的目标是为结果提供一个通用包装,其中包含有关返回结果以及返回结果的各种元数据属性。

  • 结果总数(我不允许用户一次查询1000多个查询,因此他们需要知道是否还有更多查询,以便他们可以请求下一组结果)
  • 节气门时间(告诉用户在下一个请求之前回退一段时间-如果API繁忙则很有用)
  • 错误代码/信息
  • 数据用户要求

我的JSON对象如下所示:

{
    'total_results': 1001,
    'throttle': 0,
    'error_cd': 0,
    'message': 'Successful',
    'results': [
        # Data that is returned; Each end point can return a different "type"
        ]
}

目的是让我的端点简单地返回results中显示的数据(甚至不是JSON格式)。 我的问题是我该如何提供包装器?

我最初的想法是运行jsonify某种装饰器,但是装饰器可以在函数之后运行吗? IE浏览器 我可以在路线中运行代码,然后运行装饰器代码吗?

只编写包装函数呢? 我可能会做类似的事情:

 @app.route('/api/blah/')
 def my_route():
     results = calculate_my_results()
     return jsonify(format_api_result(results))

 def format_api_result(data):
     # add in your extra metadata here, return a dictionary

在我看来,功能似乎是最简单,最灵活的操作方式。 这是一些额外的代码,但是是一个装饰器。 尽管您当然可以在装饰器中完成此操作,但是我认为除了复杂性之外,它在这里没有增加太多其他功能。

如果您确实想使用装饰器路线,请查看以下内容:

http://www.jeffknupp.com/blog/2013/11/29/improve-your-python-decorators-explained/

很好地解释了装饰器如何工作以及如何在调用包装函数时精确控制。

如果我误解了您要做什么,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM