我一直在关注RESTful Web Services,并且想知道如何在REST中建模事件队列。
假设可以通过URL http://my.domain/events访问事件队列,在我看来应用于此URL的POST操作是可以的,因为它会将事件添加到代表队列的列表的末尾。此外,如果我对此URL执行GET操作,在我看来,返回队列头也是可以的。
我的问题是 - GET操作是否也可以删除队列的头部,还是应该通过单独的DELETE操作来执行?
答案 0 :(得分:5)
GET操作是否也可以删除队列的头部
不,它不是来自REST的角度。根据REST最佳实践,GET请求应安全。对URL进行任意数量的GET请求应该与不发出任何请求具有相同的效果 还有一个关于你的设计的问题。检索队列头通常有两种常见模式:
为了支持这两种模式,我认为您应该只在执行GET时检索消息并实现DELETE方法,以便它将已删除的消息对象作为响应返回。这样您就可以遵守REST统一接口,并且您的队列客户端将能够实现这两种模式。
希望它有所帮助!
答案 1 :(得分:2)
您的完整性要求是否允许一步完成GET + DELETE? 事件通常不应该丢失。如果执行删除后响应检索失败会发生什么?
我会获取队列的头部,然后发送包含已收到并成功处理的事件ID的确认。因此,您保证至少一次交付。
根据您正在处理的事件数量,消息总线可能是更合适的选项。
答案 2 :(得分:-1)
不要成为一个过分热心的REST范式崇拜者。 REST是一种协议,但它不一定需要传达服务的合同。
只要消费者和队列之间的合同清晰且有文件记录,你所说的就完全没问题了。