将事件队列建模为一个宁静的服务是否可以接受?

时间:2017-10-06 16:41:45

标签: rest architecture

我一直在关注RESTful Web Services,并且想知道如何在REST中建模事件队列。

假设可以通过URL http://my.domain/events访问事件队列,在我看来应用于此URL的POST操作是可以的,因为它会将事件添加到代表队列的列表的末尾。此外,如果我对此URL执行GET操作,在我看来,返回队列头也是可以的。

我的问题是 - GET操作是否也可以删除队列的头部,还是应该通过单独的DELETE操作来执行?

3 个答案:

答案 0 :(得分:5)

  

GET操作是否也可以删除队列的头部

不,它不是来自REST的角度。根据REST最佳实践,GET请求应安全。对URL进行任意数量的GET请求应该与不发出任何请求具有相同的效果 还有一个关于你的设计的问题。检索队列头通常有两种常见模式:

  1. 第一个是获取头,处理它然后通知队列删除消息如果处理成功,如果没有,消息将返回队列再次处理。这是一种更强大的方法。
  2. 第二个是获取队列头并同时删除它,就像你在问题中描述的那样。
  3. 为了支持这两种模式,我认为您应该只在执行GET时检索消息并实现DELETE方法,以便它将已删除的消息对象作为响应返回。这样您就可以遵守REST统一接口,并且您的队列客户端将能够实现这两种模式。

    希望它有所帮助!

答案 1 :(得分:2)

您的完整性要求是否允许一步完成GET + DELETE? 事件通常不应该丢失。如果执行删除后响应检索失败会发生什么?

我会获取队列的头部,然后发送包含已收到并成功处理的事件ID的确认。因此,您保证至少一次交付。

根据您正在处理的事件数量,消息总线可能是更合适的选项。

答案 2 :(得分:-1)

不要成为一个过分热心的REST范式崇拜者。 REST是一种协议,但它不一定需要传达服务的合同。

只要消费者和队列之间的合同清晰且有文件记录,你所说的就完全没问题了。