Rest 密码更新失败的最佳HTTP状态码错误是什么?
我正在构建一些RESTAPI,以便在本机iOS/Android应用程序中使用。 其中一个端点允许用户通过提供两个字段来更新其密码:Rest 密码更新失败的最佳HTTP状态码错误是什么?,rest,api,http-status-codes,Rest,Api,Http Status Codes,我正在构建一些RESTAPI,以便在本机iOS/Android应用程序中使用。 其中一个端点允许用户通过提供两个字段来更新其密码:old\u password和password 在旧密码不正确的情况下,我应该使用哪个HTTP状态代码 我的第一个想法是一个401错误,但我已经在身份验证令牌无效时使用了它,它会自动触发应用程序中的注销 400似乎不合适,因为请求实际上在语义上是正确的,这是一个特定的身份验证错误。可能是422?需要记住的一件事是,状态代码和响应头一样,都是元数据;它们的存在使得那些对
old\u password
和password
在旧密码不正确的情况下,我应该使用哪个HTTP状态代码
我的第一个想法是一个401
错误,但我已经在身份验证令牌无效时使用了它,它会自动触发应用程序中的注销
400
似乎不合适,因为请求实际上在语义上是正确的,这是一个特定的身份验证错误。可能是422
?需要记住的一件事是,状态代码和响应头一样,都是元数据;它们的存在使得那些对API的细节一无所知的通用组件可以智能地参与进来——例如,通过使缓存失效,或者抛出对话框来收集身份验证凭据
400似乎不合适,因为请求实际上在语义上是正确的
实际上,400
通常可以;客户机应该像对待400一样对待4xx类状态代码。换句话说,您可以使用400,除非您特别希望通用组件产生不同的行为
对于您的具体情况,可能是最接近的匹配
409(冲突)状态代码表示由于与目标资源的当前状态冲突,请求无法完成。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效负载,其中包含足够的信息,以便用户识别冲突的来源
409
和422
之间的区别可能很有趣。解释这一区别
422:这可能包括试图以导致资源无效的方式修改资源
409:给定资源的状态,无法应用该请求
您还可以使整个4xx类响应代码不合适。例如,如果请求方法为,则服务器应
根据资源自身的特定语义处理请求中包含的表示
它做到了;甚至成功。它只是没有产生最普遍预期的成功结果
另一方面,JSON补丁会提出另一个方向;您更改密码的尝试可能看起来像
[
{ "op": "test", "path": "/password", "value": "old_password" },
{ "op": "replace", "path": "/password", "value": "new_password" }
]
如果您在测试中提供了错误的密码
,则该操作将被视为不成功,这反过来意味着修补程序不成功。这反过来会调用中所述的错误处理参数。需要记住的一件事是,状态代码(如响应头)是元数据;它们的存在使得那些对API的细节一无所知的通用组件可以智能地参与进来——例如,通过使缓存失效,或者抛出对话框来收集身份验证凭据
400似乎不合适,因为请求实际上在语义上是正确的
实际上,400
通常可以;客户机应该像对待400一样对待4xx类状态代码。换句话说,您可以使用400,除非您特别希望通用组件产生不同的行为
对于您的具体情况,可能是最接近的匹配
409(冲突)状态代码表示由于与目标资源的当前状态冲突,请求无法完成。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效负载,其中包含足够的信息,以便用户识别冲突的来源
409
和422
之间的区别可能很有趣。解释这一区别
422:这可能包括试图以导致资源无效的方式修改资源
409:给定资源的状态,无法应用该请求
您还可以使整个4xx类响应代码不合适。例如,如果请求方法为,则服务器应
根据资源自身的特定语义处理请求中包含的表示
它做到了;甚至成功。它只是没有产生最普遍预期的成功结果
另一方面,JSON补丁会提出另一个方向;您更改密码的尝试可能看起来像
[
{ "op": "test", "path": "/password", "value": "old_password" },
{ "op": "replace", "path": "/password", "value": "new_password" }
]
如果您在测试中提供了错误的密码
,则该操作将被视为不成功,这反过来意味着修补程序不成功。这反过来将调用错误处理的参数,如中所述