我有一个使用flask-restplus的非常简单的服务
from flask import make_response
from flask_restplus import Resource, Namespace, abort
api = Namespace('my-service')
# my_request and my_response omitted
@api.errorhandler(Exception)
def handle_error(error):
return {
'code': '0001',
'description': 'internal error',
'message': str(error)
}, 500
@api.route('/my-resource')
class MyResource(Resource):
@api.expect(my_request, validate=True)
@api.marshal_with(my_response)
def post(self):
// Option 1
return {
'code': '0002',
'description': 'not found',
'message': 'report not found'
}, 404
// Option 2
abort(make_response({
'code': '0002',
'description': 'not found',
'message': 'report not found'
}, 404))
问题是如果我使用Option 1
,则响应由@api.marshal_with
编组,因此响应正文为my_response
。
如果我使用Option 2
,则abort()
会抛出一个异常,该异常会被handle_error()
捕获并变成500。
正确的做法是什么?