实施 API 异常 flask-restful

Implementing API exception flask-restful

我正在尝试捕获当提供的 url 混乱且错误 url 时引发的异常,然后 return 错误响应为 JSON。这就是我为实现这个逻辑所做的。

key_id 不是 S3 的有效密钥时,分析 class 内部会引发异常。

def url_error(status_code, message, reason):
    response = jsonify({
        'status': status_code,
        'message': message,
        'reason': reason
    })
    response.status_code = status_code
    return response


class RowColumnCount(Resource):
    def get(self, key_id):
        try:
            rc = Analysis(key_id=key_id)
        except S3ResponseError as e:
            return url_error(e.status, e.message, e.reason)
        json_response = json.loads(rc.count_rows_columns())
        return json_response

上面的代码工作正常,但对于 50 个不同的资源 classes,它有点重复。每个资源 class 都应处理此特定错误。如何做装饰器,减少代码重复

我正在使用 Flask, Flask-Restful, Python 3.4.3

有几种方法可以实现您想要做的事情,但我认为最干净的方法是扩展资源 class,如 Flask-Restful 文档中所述here 并创建一个新的装饰器,其工作是捕获 S3ResponseError 和 return 适当的响应。然后,您可以从新的基础资源 class.

子class 所有资源

此外,我建议您按照 here and here 所述指定 API 级别 json_output 方法,这样您所要做的就是 return 来自任何您的资源,它们将适当地转换为 JSON。