来自浏览器的REST身份验证表示

来自浏览器的REST身份验证表示,rest,restful-authentication,Rest,Restful Authentication,我工作的公司已经开始创建RESTful服务,大部分开发工作都外包出去了 我们的第一项服务是用户身份验证。当用户输入错误的用户名和密码时,浏览器会收到状态代码200,响应正文表示为: { "state": "FAILED", "responseCode": 400, "timestamp": 1310378271300, "anies": [ { "errorCode": "-6600", "error

我工作的公司已经开始创建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”属性是错误对应的表单元素/参数

我觉得这是不对的

  • 浏览器是否应该收到400的状态代码,然后查看其失败的原因
  • 翻译文本是否应该有一个属性,或者如果接受标题为en、fr等,那么已经翻译文本是否有意义
  • 还有什么别的建议吗

  • 谢谢

    400表示请求不正确(请参阅)。此实例中的用法不正确,请求很好,只是用户未经验证。我将返回带有上面列出的详细信息的响应代码200。

    请参阅答案,了解为什么400响应可能是最好的选择


    更大的问题是,状态代码作为内容的一部分返回。我认为为API调用返回一个适当的400状态,在内容中返回错误的详细信息会更有意义。另外,我认为您是对的,在请求的语言中包含Accept Language标头并返回内容更有意义。

    服务不应返回http状态:
    200 ok
    ,因为出现错误。它必须返回错误状态代码:

    • 400错误请求
      表示请求格式错误,例如未发送用户名
    • 401未经授权
      表示用户名和密码不匹配,登录失败,或者在需要权限的其他页面上,表示您必须先登录
    • 403无权限
      表示您已登录,但您没有访问当前页面的权限

    REST只有通过错误处理得到的状态代码建议,因此您在响应正文中返回的所有内容都可能依赖于应用程序。如果您对此感到满意,可以在错误消息格式中使用
    responseCode:400

    谢谢John。您认为即使验证失败,浏览器仍能接收到状态200吗?我不想在这里声称得到正确答案,但我在浏览器中执行此操作的方法是使用flash消息重定向回引用的URL。所以我在重定向后得到了一个200。我认为对于应用程序流来说,这比使用400更好,但是其他人可能有更好的想法。对于浏览器中的ajax调用,我会执行正常的400状态,并使用javascript处理。如果其他人想跟进,我已经在REST用户组上发布了相同的问题-现场!!对于RESTAPI,永远不要返回200:OK状态,除非它真的一切正常。。。让我们不要再搞砸HTTP了,当某些事情肯定是错误的。。。返回相应的4XX状态代码。@vanHoesel我完全同意。