我正在编写Restful API,我必须返回错误消息,但我不确定该走哪条路线。
路由1 - HTTP状态
当客户端发送坏数据时使用HTTP错误状态
示例:401 -未授权,410 -型号不存在,412 -型号验证错误,等等
Route 2 - JSON Success or Error Failure
API返回json,我正在考虑返回http头200的所有内容,但随后在我的json处理错误和成功
交货:{"status": "error", "message": "Model validation error", "data": ["user name required", "user email required"]}
我应该走哪条路,为什么?优点和缺点
我正在写一个Restful API,我必须返回错误消息,但我不知道该走哪条路
路由1 - HTTP状态
当客户端发送坏数据时使用HTTP错误状态
HTTP状态码应该绝对用于任何声称是RESTful的web服务实现。该规范的核心原则是利用和扩展Web以完全支持表示状态的传输。为了允许与现有Web基础设施进行互操作,REST实现应该通过适当的HTTP状态码指示请求的状态。例如:
200 - Ok
2011 -内容创建
401 -未经授权
403 -禁止
500 -服务器错误
501 -未实现
当使用这些状态进行响应时,HTTP规范也允许在响应体中包含实体表示。在"正常"、无错误响应的情况下,这种表示通常是HTTP请求正在"操作"的实体。在错误响应的情况下,如果包含表示,则应提供有关发生错误的更多信息。这是我们跳转到选项2的地方。
Route 2 - JSON Success or Error Failure
API返回json,我正在考虑返回的一切http头200,但随后在我的JSON处理错误和成功
绝对不应该对所有响应返回200 OK。许多实现良好的HTTP客户端依赖于响应中的状态码来确定它是否成功。总是响应200 OK会导致第三方客户端库错误地处理传入的数据,并且还要求您的客户端解析响应体,以确定是否实际发生了错误。
话虽如此,添加关于发生的错误的额外信息可能非常有帮助,所以一定要考虑将其添加到响应体中。您建议的格式看起来很好,但老实说,status
元素是多余的,假设您正确地使用了HTTP状态码。更像是:
{
"message": "Model validation error",
"data": [
"user name required",
"user email required"
]
}