- REST API中“Not Ready Yet, Try Again Later”的最佳HTTP状态码是什么? 这是关于获取一个项目的。
- 在HTTP GET的响应中返回202“Accepted”是否有问题? 这是关于获取一个项目的。
- 资源尚未可用的HTTP状态码 这是关于POST的。
- 进行中的HTTP状态码是多少? 这是关于GET的,但没有明确的答案。
但我仍然认为我应该在这里提出我的问题和想法。在使用GET查询“Not Ready Yet, Try Again Later”资源时,REST API应该使用什么HTTP状态码?例如,客户端尝试通过向此URL发出HTTP GET来查询所有未来在本地发生的新闻(!):http://example.com/news?city=chicago&date=2099-12-31,那么服务器应该回复什么?
这些是我考虑过的http状态码,它们的rfc定义以及我为什么不完全满意:
3xx重定向。注释:因为没有其他链接可以重定向到,所以不是一个选项。
503服务不可用:由于服务器的临时超载或维护,服务器目前无法处理请求。这意味着这是一个暂时的条件,在一定延迟后将得到缓解。如果已知,可以在Retry-After头中指示延迟的长度。注释:期望重试行为,但语义上根本不是服务器的错误,所以所有5xx看起来都很奇怪。
4xx客户端错误。注释:看起来很有前途。见下文。
413请求实体过大:服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的大小。如果条件是暂时的,服务器应该包含一个Retry-After头字段,以指示它是暂时的,并在什么时间后客户端可以再次尝试。注释:期望重试行为,但“实体过大”部分有些误导。
417 Expectation Failed:在Expect请求标头字段(参见第14.20节)中给出的期望不能被此服务器满足。注释:因此,应该是由Expect请求标头引起的,对我的情况不适用。
406无法接受:资源……根据发送到请求中的接受标头不可接受。注释:因此,它是由Accept请求标头引起的,对我的情况不适用。
409冲突:由于与资源的当前状态发生冲突,无法完成请求。只有在预计用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。……冲突最可能发生在响应PUT请求时。注释:这个很接近。尽管我的情况与PUT无关,并且实际上并不是由冲突引起的。
404未找到:服务器没有找到与请求URI匹配的任何内容。注释:从技术上讲,我的url路径(http://example.com/news)确实存在,只是参数引起了问题。在这种情况下,返回一个空集合而不是404可能更合适。
403禁止:服务器理解请求,但拒绝履行它。授权无法帮助,也不应重复请求。注释:通常应在任何受限资源中使用吗?
400错误请求:由于格式不正确,服务器无法理解请求。客户端不应在不修改的情况下重复请求。注释:在我的情况下不是真的。我的服务器理解请求,它的语法很好,只是意义不好。
2xx成功。注释:如果4xx不起作用,那么2xx怎么样?见下文。
200 OK。注释:好的。那么我应该在响应正文中包含什么?null或[]或{}或{"date": "2099-12-31", "content_list": null}或……哪一个更直观?另一方面,我更喜欢一种清晰区分较
你的想法是什么?