我正在构建一个返回JSON字符串的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浏览器。我可以在我的路线中运行代码然后运行装饰器代码吗?
答案 0 :(得分:3)
如何编写包装函数呢?我可能会做类似的事情:
@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/
有关装饰器如何工作以及如何控制包装函数的确切控制的详细解释。
如果我误解了你想要做的事,请告诉我。