REST API使用HTTP响应代码进行响应
我正在创建一个RESTAPI,但在HTTP响应方面遇到了一个难题。我在这里只找到了一条线索,看起来像是同一个问题,但我并不十分清楚所选的答案 例如,我有一个API端点,用于检查是否存在具有X电子邮件地址的用户。因此可能有3种结果REST API使用HTTP响应代码进行响应,rest,http,http-response-codes,Rest,Http,Http Response Codes,我正在创建一个RESTAPI,但在HTTP响应方面遇到了一个难题。我在这里只找到了一条线索,看起来像是同一个问题,但我并不十分清楚所选的答案 例如,我有一个API端点,用于检查是否存在具有X电子邮件地址的用户。因此可能有3种结果 1- X exists (200) 2- X does not exist (404) 3- X has invalid syntax etc. (400) 现在,当web服务器返回时,它是否应该始终返回代码200,但响应主体应该具有与错误相关的错误代码?或者http
1- X exists (200)
2- X does not exist (404)
3- X has invalid syntax etc. (400)
现在,当web服务器返回时,它是否应该始终返回代码200,但响应主体应该具有与错误相关的错误代码?或者http服务器也应该返回带有代码的响应+主体是否会有API响应
困境在于,从HTTP的角度来看,请求得到了完美的满足。所以在我看来,响应代码应该是200,但API响应应该包括与操作结果相关的代码。这是路吗?例如,如果用户不存在,HTTP响应200+JSON响应的内容错误为404
您知道社区包(如FOSRestBundle)是如何处理这一问题的吗
谢谢 这取决于您希望如何在服务中实现HTTP响应代码的客户端要求。如果您希望您的服务遵守RESTfulAPI约定,那么使用200表示成功响应,400表示错误请求,404表示找不到对象是正确的方法
我想补充一点,在后端服务中添加客户端逻辑不是一个好主意,因为它会将您的后端与特定的客户端紧密绑定。如果您想使用相同的API服务向iOS客户端提供请求,那么您需要以与Android客户端相同的方式编写iOS客户端。因此,最好将特定于客户端的逻辑保留在客户端,并使REST API服务尽可能轻。这取决于您希望如何在服务中实现HTTP响应代码的客户端要求。如果您希望您的服务遵守RESTfulAPI约定,那么使用200表示成功响应,400表示错误请求,404表示找不到对象是正确的方法 我想补充一点,在后端服务中添加客户端逻辑不是一个好主意,因为它会将您的后端与特定的客户端紧密绑定。如果您想使用相同的API服务向iOS客户端提供请求,那么您需要以与Android客户端相同的方式编写iOS客户端。因此,最好在客户端保留特定于客户端的逻辑,并使RESTAPI服务尽可能轻 例如,我有一个API端点,用于检查是否存在具有X电子邮件地址的用户。因此可能有3种结果
1- X exists (200)
2- X does not exist (404)
3- X has invalid syntax etc. (400)
让此类请求的URL如下所示:
https://example.com/api/v1/users/john.doe%40example.com
此API提供了一个/users
集合资源,其中单个用户通过其电子邮件地址(如john)进行标识。doe@example.com
。用户URI的相关路径类似于/users/john.doe%40example.com
对此类URL的GET
请求应返回以下HTTP状态代码:
- 如果存在具有该电子邮件地址的用户
- 如果不存在这样的用户
1- X exists (200)
2- X does not exist (404)
3- X has invalid syntax etc. (400)
让此类请求的URL如下所示:
https://example.com/api/v1/users/john.doe%40example.com
此API提供了一个/users
集合资源,其中单个用户通过其电子邮件地址(如john)进行标识。doe@example.com
。用户URI的相关路径类似于/users/john.doe%40example.com
对此类URL的GET
请求应返回以下HTTP状态代码:
- 如果存在具有该电子邮件地址的用户
- 如果不存在这样的用户
未找到
部分表示未找到目标资源的当前表示形式;如果您返回的是一个没有描述匹配项的表示,那么您不应该发送404
例如:想想谷歌——当你的搜索没有结果时,你会得到什么状态码?或者Atom联合——如果您调用GET请求来列出,并且集合存在但当前没有成员,那么您应该