将ElasticSearch SDK封装在facade中,以包含一些调用的附加信息


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

这需要一点背景知识,所以如果我不够清楚,我很抱歉。

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

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

我们通过让二级API接受由两个"部分"组成的请求来实现这一点:

  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,并让他们使用所需的参数直接扩展数据。