【问题标题】:How can I return a common JSON object in my flask API?如何在我的烧瓶 API 中返回一个常见的 JSON 对象?
【发布时间】:2014-10-22 01:55:51
【问题描述】:

我正在构建一个返回 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。我可以在我的路由中运行代码然后运行装饰器代码吗?

【问题讨论】:

  • @AlexWoolford,你的意思是把这个逻辑放在我的每个端点中吗?这似乎……效率低下。

标签: python json flask decorator


【解决方案1】:

写一个包装函数怎么样?我可能会这样做:

 @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/

很好地解释了装饰器的工作原理以及您如何准确控制包装函数何时被调用。

如果我误解了您要执行的操作,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 2021-12-22
    • 2021-07-24
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多