2024-04-27 00:55:23 发布
网友
例如,对users/9运行GET请求,但没有id为9的用户。 哪一个是最好的响应代码?
users/9
TL;DR:使用404
404
见This Blog。它解释得很好。
博客对204的评论摘要:
204
204 No Content
DELETE
POST
因此,您的问题的答案是在您的案例中使用404。204是一种特殊的响应代码,您不应该经常返回浏览器以响应GET。
GET
其他比204和404更不合适的响应代码:
200
202
400
维基百科的description of the HTTP status codes特别有用。 您还可以看到定义in the HTTP/1.1 RFC2616 document at www.w3.org
我强烈反对404,赞成204或200的空数据。
请求已被接收并正确处理-它确实触发了服务器上的应用程序代码,因此不能真正说它是客户端错误,因此整个客户端错误代码类(4xx)都不合适。
更重要的是,404的发生有很多技术原因。E、 g.服务器上临时停用或卸载的应用程序、代理连接问题等。因此,客户端无法区分表示“空结果集”的404和表示“找不到服务,请稍后再试”的404。
这可能是致命的:想象一下,在你的公司里,有一家会计服务公司列出了所有应发年终奖的员工。不幸的是,一次调用它时返回404。这是否意味着没有人应该获得奖金,或者应用程序当前正在关闭以进行新的部署?
->;对于关心数据质量的应用程序,404几乎是一个不可能的选择。
此外,许多客户机框架通过抛出一个异常来响应404,而不提出进一步的问题。这将迫使客户端开发人员捕获该异常,对其进行评估,然后根据该异常决定是将其记录为由监视组件(例如)发现的错误,还是将其忽略。在我看来也不好看。
404相对于204的唯一优点是,它可以返回一个响应实体,该响应实体可能包含关于为什么未找到请求的资源的一些信息。但是,如果这确实是相关的,那么也可以考虑使用200ok响应,并以允许有效载荷数据中的错误响应的方式设计系统。 或者,可以使用404响应的有效负载将结构化信息返回给调用者。如果他接收到一个html页面,而不是他可以解析的XML或JSON,那么这是一个很好的迹象,表明某个技术错误,而不是从调用者的角度看可能有效的“无结果”回复。或者可以使用HTTP响应头。
尽管如此,我还是更喜欢204或200的回答是空的。这样,请求的技术执行状态就从请求的逻辑结果中分离出来。2xx的意思是“技术执行可以,这是结果,处理它”。
我认为在大多数情况下,应该由客户来决定空结果是否可以接受。通过返回404,尽管有正确的技术执行,客户机可能决定将案例视为没有错误的错误。
另一个简单的类比是:如果SQL查询没有返回结果,则返回404作为“未找到结果”,就好像抛出DatabaseConnectionException一样。它可以完成任务,但是有很多可能的技术原因会抛出相同的异常,然后会被误认为是有效的结果。
起初,我以为204是有道理的,但经过讨论,我相信404是唯一正确的答案。考虑以下数据:
用户:John、Peter
METHOD URL STATUS RESPONSE GET /users 200 [John, Peter] GET /users/john 200 John GET /users/kyle 404 Not found GET /users?name=kyle` 200 [] DELETE /users/john 204 No Content
一些背景:
搜索返回一个数组,它没有任何匹配项,但是 它包含以下内容:空数组。
404当然最出名的是不受 请求的服务器,但丢失的资源实际上是相同的。 即使/users/:name与users/kyle匹配,用户 凯尔没有可用的资源,所以404仍然适用。它不是 搜索查询,它是动态url的直接引用,所以是404。
/users/:name
users/kyle
不管怎样,我的两分钱:)
TL;DR:使用
404
见This Blog。它解释得很好。
博客对
204
的评论摘要:204 No Content
作为浏览器的响应代码并不是非常有用(尽管根据HTTP规范,浏览器确实需要将其理解为“不要更改视图”响应代码)。204 No Content
是但是,它对于ajax web服务非常有用,因为ajaxweb服务可能希望指示成功,而不必返回某些内容。(尤其是像DELETE
或POST
这样不需要反馈的情况)。因此,您的问题的答案是在您的案例中使用
404
。204
是一种特殊的响应代码,您不应该经常返回浏览器以响应GET
。其他比
204
和404
更不合适的响应代码:200
应该与成功获取的内容的主体一起返回。当您要提取的实体不存在时不合适。202
在服务器已开始处理对象但该对象尚未完全就绪时使用。当然不是这样。您还没有开始,也不会开始响应GET
请求而构建用户9。这违反了所有的规则。400
用于响应格式不正确的HTTP请求(例如格式不正确的HTTP头、顺序不正确的段等)。这几乎肯定会由您使用的任何框架来处理。除非您是从头开始编写自己的服务器,否则不必处理这个问题。编辑:Newer RFCs现在允许400用于语义无效的请求。维基百科的description of the HTTP status codes特别有用。 您还可以看到定义in the HTTP/1.1 RFC2616 document at www.w3.org
我强烈反对404,赞成204或200的空数据。
请求已被接收并正确处理-它确实触发了服务器上的应用程序代码,因此不能真正说它是客户端错误,因此整个客户端错误代码类(4xx)都不合适。
更重要的是,404的发生有很多技术原因。E、 g.服务器上临时停用或卸载的应用程序、代理连接问题等。因此,客户端无法区分表示“空结果集”的404和表示“找不到服务,请稍后再试”的404。
这可能是致命的:想象一下,在你的公司里,有一家会计服务公司列出了所有应发年终奖的员工。不幸的是,一次调用它时返回404。这是否意味着没有人应该获得奖金,或者应用程序当前正在关闭以进行新的部署?
->;对于关心数据质量的应用程序,404几乎是一个不可能的选择。
此外,许多客户机框架通过抛出一个异常来响应404,而不提出进一步的问题。这将迫使客户端开发人员捕获该异常,对其进行评估,然后根据该异常决定是将其记录为由监视组件(例如)发现的错误,还是将其忽略。在我看来也不好看。
404相对于204的唯一优点是,它可以返回一个响应实体,该响应实体可能包含关于为什么未找到请求的资源的一些信息。但是,如果这确实是相关的,那么也可以考虑使用200ok响应,并以允许有效载荷数据中的错误响应的方式设计系统。 或者,可以使用404响应的有效负载将结构化信息返回给调用者。如果他接收到一个html页面,而不是他可以解析的XML或JSON,那么这是一个很好的迹象,表明某个技术错误,而不是从调用者的角度看可能有效的“无结果”回复。或者可以使用HTTP响应头。
尽管如此,我还是更喜欢204或200的回答是空的。这样,请求的技术执行状态就从请求的逻辑结果中分离出来。2xx的意思是“技术执行可以,这是结果,处理它”。
我认为在大多数情况下,应该由客户来决定空结果是否可以接受。通过返回404,尽管有正确的技术执行,客户机可能决定将案例视为没有错误的错误。
另一个简单的类比是:如果SQL查询没有返回结果,则返回404作为“未找到结果”,就好像抛出DatabaseConnectionException一样。它可以完成任务,但是有很多可能的技术原因会抛出相同的异常,然后会被误认为是有效的结果。
起初,我以为204是有道理的,但经过讨论,我相信404是唯一正确的答案。考虑以下数据:
用户:John、Peter
一些背景:
搜索返回一个数组,它没有任何匹配项,但是 它包含以下内容:空数组。
404当然最出名的是不受 请求的服务器,但丢失的资源实际上是相同的。
即使
/users/:name
与users/kyle
匹配,用户 凯尔没有可用的资源,所以404仍然适用。它不是 搜索查询,它是动态url的直接引用,所以是404。不管怎样,我的两分钱:)
相关问题 更多 >
编程相关推荐