我工作的公司已经开始创建RESTful服务,大部分开发都是外包的。
我们的第一项服务是用户身份验证。当用户输入错误的用户名和密码时,浏览器会收到状态代码200,并且响应正文表示为:
{
"state": "FAILED",
"responseCode": 400,
"timestamp": 1310378271300,
"anies": [
{
"errorCode": "-6600",
"errorType": "MSG_ERR_EMPTY_ACCOUNT_API_KEY",
"translation": {
"lang": "en",
"value": "Provided login is empty"
},
"property":"apiKey"
},
{
"errorCode": "-6601",
"errorType": "MSG_ERR_EMPTY_ACCOUNT_API_PASSWORD",
"translation": {
"lang":"en",
"value":"Provided password is empty"
},
"property": "apiPassword"
}
]
}
浏览器与控制器交互,控制器又调用Web服务。我们也会让客户直接与服务进行互动。
上面的表示包含失败状态(400),一个内部错误代码,因此服务的客户端可以查找特定语言中的错误以及浏览器将用于显示的错误的转换屏幕。 “property”属性是错误对应的表单元素/参数。
这对我来说不合适。
谢谢
答案 0 :(得分:1)
请参阅答案here,了解400响应的原因。
更大的问题是状态代码是作为内容的一部分返回的。我认为为API调用返回正确的400状态更有意义,返回内容中错误的详细信息。此外,我认为你选择包含Accept-Language标题并以所请求的语言返回内容更合理。
答案 1 :(得分:1)
该服务不应返回http状态:200 ok
,因为出现错误。它必须返回错误状态代码:
400 bad request
表示请求格式错误,例如没有发送用户名。401 unauthorized
表示用户名和密码不匹配,登录失败,或者在需要权限的其他页面上,这意味着您必须先登录。403 no permission
表示您已登录,但您无权访问当前页面。 REST通过错误处理仅提供状态代码建议,因此您在响应正文中返回的所有内容都可以取决于应用程序。如果您对此感到满意,请随意在错误消息格式中使用responseCode: 400
...
答案 2 :(得分:0)
400表示错误请求(请参阅here)。在这种情况下使用不正确,请求很好,只是用户没有经过验证。我会返回响应代码200,其中包含上面列出的详细信息。