2012-01-21 70 views
3

我目前使用RESTful API开发任务队列。纠正不可满足的REST请求的HTTP状态代码

为了处理任务,工作人员必须创建一个租约。

PUT .../leases 

如果任务队列中有任务可用,这会成功,租约将被创建并在服务器状态201响应。

我不确定在没有任何任务可用时如何处理这种情况。当没有可用的任务时,无法创建租约。哪种HTTP状态码适合这种情况?

  • 204 No Content - 客户端没有出错,但没有数据。

  • 400 Bad Request - 这是恕我直言不适用,因为它意味着,这是不是这种情况

与此同时,我认为“请求无法被服务器理解”,这种方法可能不是理想的。我可以按照Brian的推荐使用503,也可以使用REST in practice,否则我会改变整个过程。

我在考虑可以暂时创建的租约。这意味着

  1. PUT/leases
  2. 可以创建一个租赁,分配任务,并与201回应,或创建一个试探性租赁与202
  3. 暂定租赁响应会停留一段时间。如果任务可用,则将其分配给暂定租约。如果对于一个特定的时间内没有任务,租赁被删除,服务器将与410
  4. 响应客户端应该因为资源是由服务器控制,然后再以1

回答

3

开始,客户不能做任何事情来影响结果,500范围的代码将是最合适的。

503 - Service Unavailable听起来对我。这意味着服务器没有足够的资源来满足请求的需求。您应该还可能在响应主体中返回一个有意义的错误,以明确说明它失败了,因为没有任何租约/任务可用,但未来可能不是这种情况。

1

404 - Not Found可以使用。 Wikipedia将其总结为:

找不到请求的资源,但可能在将来再次可用。客户的后续请求是允许的。

+0

我不喜欢说的概念,资源不存在,因为它是存在的。也许我的做法是错误的。 – ccellar

+0

查看它的一种方法是,如果您尝试在不存在的博客上查看页面,则会得到404页面。如果该页面被创建,它将不再是404。它仍然不是一个确切的适合,但我不认为他们中的任何一个。 – abraham

1

404几乎可以工作,但我认为它是您正在处理的资源,您正在做一个PUT来创建资源。当然,它不存在,这就是你创建它的原因。

我同意你对狭义的定义中的400错误请求的第一个想法。但是,如果你扩大定义以包含任何可能出现错误的请求,那么它将适合你的情况,我认为这是可以接受的。例如,如果请求不符合我们期望的模式,并且资源上存在验证错误,我们会发回400。对于我们的服务,如果我们可以编程确定这是一个不好的请求,我们会发回一个400.

为您的服务在没有任何可用任务时创建租约构成了一个错误的请求,您可以发送400文本解释问题是什么。我认为400是为了更广泛的定义,然后是你持有的。

我不认为500的工作,因为他们更多的未处理的东西,这是一种情况下,你可以处理和提供信息的答复。

希望这会有所帮助。

0

如果我尝试使用不支持的方法(即,当它期望GET时发送PUT),IIS将发送405方法不允许。如果端点根本不存在,它会发送404 Not Found。