在外观中包装 ElasticSearch SDK 以包含有关某些调用的附加信息

Wrapping ElasticSearch SDK in facade to include additional info on some calls

这需要一点背景知识,所以如果我不够清楚,请见谅。

我有一个通过辅助 API 公开的 ES (ElasticSearch) 服务。

辅助 API 负责检查内容的所有权和访问权限,这是通过标准 HTTP Authorization 和两个标识符 app_codebrand_code.

我们通过让辅助 API 接收由两个 "parts":

组成的请求来实现这一点
  1. 用于所有权和访问验证的两个标识符。
  2. 一个普通的 ES 查询,如果可以验证授权,我们直接将其传递给我们的 ES 服务。

要求:

{
    app_code: mobile,
    brand_code: fashion,
    query: {
        // Standard ES Query
    }
}

我们有很多外部开发人员需要使用我们的 ElasticSearch 服务 - 因此我们希望通过提供 SDK 来帮助简化他们的实践。

但是为 ES 开发自定义 SDK 是愚蠢的,因为这已经完成并开源了。因此,我们尝试将当前的 ES SDK 包装在某种 "facade-sdk" 中,这将简单地在每个请求中包含 app_code 和 brand_code。

然而,这会导致大量维护,因为我们现在必须采用原始 ES-SDK 中的每个方法并将其修改为现在还包括其他两个标识符。

TL:DR - 需要包装另一个 SDK 以便在每个请求中发送附加信息。目前采用外观方法,但最终维护过多。

外墙是正确的做法吗?我们是否可能遗漏了一些更简单的选择,或者这只是一项必要的努力?

通过在 SDK 中内置的每个查询上简单地扩展标识(app_codebrand_code)解决了这个问题。

这是可能的,因为 ElasticSearch SDK 的构建方式基本上是作为常规 HTTP 客户端的包装器,对数据强制执行很少的必需结构。

这意味着我们可以简单地让外部开发人员使用 SDK,并让他们直接使用所需参数扩展数据。