我目前正在使用RESTful API开发一个任务队列。
为了处理任务,工人必须创建租约。
PUT .../leases
如果任务队列中有任务可用,则会成功,将创建租约,服务器将以状态201
响应。
我不确定在没有任何任务时如何处理这种情况。当没有可用任务时,无法创建租约。哪种HTTP状态代码适用于这种情况?
204 No Content
- 客户端没有出错,但没有数据。
400 Bad Request
- 这是不适用的,因为它意味着“服务器无法理解请求”,情况并非如此
与此同时,我认为这种做法可能并不理想。要么我使用503
,按照Brian的推荐,也要使用REST in practice的段落,或者我改变整个过程。
我在考虑可以暂时创建的租约。这意味着
PUT
至/leases
201
回复或创建暂定租约并使用202
回复410
答案 0 :(得分:3)
由于资源是由服务器控制的,客户端无法做任何事情来影响结果,因此500范围的代码是最合适的。
503 - Service Unavailable
听起来对我不对。这意味着服务器没有足够的资源来满足请求的需要。您可能还应该在响应正文中返回一个有意义的错误,以明确说明它失败了,因为没有可用的租约/任务,但在将来某个时候可能不是这种情况。
答案 1 :(得分:1)
404 - Not Found
。 Wikipedia将其概括为:
找不到请求的资源,但将来可能会再次提供。客户的后续请求是允许的。
答案 2 :(得分:1)
404几乎可以工作,但我认为它是你正在处理的资源,你正在做一个创建资源的PUT。当然,它不存在,这就是你创造它的原因。
我同意你在狭义的定义中对400 Bad Request的第一个想法。但是,如果你扩大定义以包括任何可能出错的请求,那么它将适合你的情况,我认为这样做是可以接受的。例如,如果请求不符合我们期望的模式并且资源上存在验证错误,我们会发回400。对于我们的服务,如果我们可以通过编程确定这是一个错误的请求,我们会发回400。
对于您的服务,在没有可用任务的情况下创建租约会构成错误请求,您可以向400发送说明问题的文本。我认为400意味着更广泛的定义,然后你持有它。
我不认为500的工作是因为它们是更难处理的东西,这是一个你可以处理并提供信息响应的案例。
希望这有帮助。
答案 3 :(得分:0)
如果我尝试使用不受支持的方法(即PUT需要GET时),IIS会发送405方法不允许。如果端点根本不存在,它会发送404 Not Found。