在两个或多个插件之间共享服务

Share a service between two or more plugins

我需要在两个(或更多)插件之间共享支付服务 class,我想知道 Kuzzle 的 Pipes 是否是最好的解决方案?

我制作了一个似乎有效的 poc,但是,我没有在 kuzzle 的插件上找到任何类似的例子(比如 Kuzzle-plugin-logger 的钩子)

还有哪些选择?

在插件之间共享功能的最佳方式是将它们声明为 API 操作。

例如,您可以通过创建一个名为 payment 的插件并在其中声明一个 controller 来公开您的支付服务功能。

this.controllers = {
  card: {
    pay: request => ...,
    fraudCheck: request => ...
  }
};

然后您可以使用 embedded SDK 从另一个插件调用这些操作。请求将直接传输到 Kuzzle,无需使用网络。

this.context.accessors.sdk.query({
  controller: 'payment/card',
  action: pay,
  number: '...',
  ccv: 543,
  ...
});

由于 Kuzzle 权限是 whitelist based,因此除非您在他们的角色中明确指定,否则外部用户将无法调用您的操作。