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