【问题标题】:Is it acceptable to model an event queue as a restful service?将事件队列建模为 RESTful 服务是否可以接受?
【发布时间】:2017-10-08 03:43:30
【问题描述】:

我一直在研究 RESTful Web 服务,并且想知道如何在 REST 中建模事件队列。

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

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

【问题讨论】:

    标签: rest architecture


    【解决方案1】:

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

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

    1. 第一个是获取一个head,处理它,如果处理成功,则通知队列删除消息,如果没有,则消息返回队列稍后再次处理。这是一种更稳健的方法。
    2. 第二个是只获取一个队列头并同时删除它,就像您在问题中描述的那样。

    为了支持这两种模式,我认为您应该只在执行 GET 时检索一条消息并实现 DELETE 方法,以便它返回一个已删除的消息对象作为响应。这样,您将遵守 REST 统一接口,并且您的队列客户端将能够实现这两种模式。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2016-12-06
          • 2016-08-21
          • 2012-06-21
          • 2018-05-27
          • 1970-01-01
          • 1970-01-01
          • 2019-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多