【问题标题】:Restful Web Service Error HandlingRestful Web 服务错误处理
【发布时间】:2015-03-31 05:46:06
【问题描述】:

在我的API中,创建新用户时,我调用了一些函数:

userInfo = request.get_json()           
email = userInfo.get('email')       
password = userInfo.get('password')
validate_email(email)       
validate_password(password)     

if (no_errors):
    add_user_to_database(user)
else:
    return exception(?)

我的目标是收集前 3 次 function 调用中的任何一个导致的所有错误。一个函数可能会捕获多个错误。

例如:

def validate_email(email):
    if email is None:
        # store error
    else:
        if email_already_on_server(email)
           # store error
        if email_too_long(email)
           # store error

    # What should I be doing here..

存储完所有errors 后,我想返回一个exception(?),显示所有已提取的errors

我不确定最好的方法是什么..

1) 我是否应该创建一个对象(自定义错误类)来传递给我的所有函数以存储任何errors

2) 如果发现错误,我应该向用户返回什么?会是自定义的exceptionHTTP status code 还包含JSON 格式的所有错误吗?

我很难找到正确的方法来做到这一点。

【问题讨论】:

  • 我倾向于使用继承 Exception 的自定义错误类来存储所有收集到的错误,您的验证调用可以捕获此错误,读取错误列表并返回 @lapinkoira 提到的 json。

标签: python exception-handling flask sqlalchemy


【解决方案1】:

对于flask,我喜欢使用jsonify库,然后我用这种方式格式化错误:

from flask import jsonify

def jsonifys(status_code=200, **kwargs):
    response = jsonify(**kwargs)
    response.status_code = status_code
    return response

然后我会从我的方法中引发错误,并在我的回复中返回如下结果:

return jsonifys(500, error='unable to create process')

因此任何前端都可以轻松读取错误代码,并且消息可以提供所需的任何信息。 JSON 格式也很方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多