发布/订阅API设计:取消订阅和更新

Publish/Subscribe API design : Unsubscribe and Update

本文关键字:更新 取消 订阅 API 设计 发布      更新时间:2023-09-26

我正在寻找一个允许我修改当前订阅的发布/订阅系统。我找不到,所以我想我可以建立自己的(JavaScript)。

我有publishsubscribe的基本方法如下:

ps.publish(params, function(err, res) {
...
});
ps.subscribe(params, function(err, data) {
...
});

现在我想在订阅中添加unsubscribingupdate的方法。Ie。如果subscribe为CREATE,则unsubscribe为DELETE, update为PUT。

我应该如何设计这些api ?update应该只是一个unsubscribe,然后是另一个subscribe吗?如何让用户选择哪个订阅?

另外,我计划使用返回值来返回future,因为我发现这是一种更优雅的方式来组合异步调用,但我不确定这是否是最好的选择,我仍然对流畅的API进行加权。因此,除非我有明确的选择,否则我宁愿现在不使用它。

unsubscribe似乎是简单的一个,但我不想在错误的地方结束:

ps.subscribe(params, function(err, data) {
   ps.unsubscribe(data.id);
});

如何构建这些方法

通常订阅函数返回另一个用于退订的函数。你可以从subscribe返回一个函数,当不带任何参数调用时,该函数将取消订阅,但当带另一个函数作为参数调用时,该函数将更新订阅。

在代码中应该是这样的:

ps.subscribe = function (params, callback) {
  ...
  return function (callback) {
    if (callback) {
      ...
      // update - replace with a new callback 
    } else {
      ...
      // cancel subscription
    }
  }
}
var changeSubscription = ps.subscribe(params, callback);
changeSubscription(anotherCallback); // update
changeSubscription(); // unsubscribe