在外观中包装 ElasticSearch SDK 以包含有关某些调用的附加信息
Wrapping ElasticSearch SDK in facade to include additional info on some calls
这需要一点背景知识,所以如果我不够清楚,请见谅。
我有一个通过辅助 API 公开的 ES (ElasticSearch) 服务。
辅助 API 负责检查内容的所有权和访问权限,这是通过标准 HTTP Authorization
和两个标识符 app_code
和 brand_code.
我们通过让辅助 API 接收由两个 "parts":
组成的请求来实现这一点
- 用于所有权和访问验证的两个标识符。
- 一个普通的 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_code
和 brand_code
)解决了这个问题。
这是可能的,因为 ElasticSearch SDK 的构建方式基本上是作为常规 HTTP 客户端的包装器,对数据强制执行很少的必需结构。
这意味着我们可以简单地让外部开发人员使用 SDK,并让他们直接使用所需参数扩展数据。
这需要一点背景知识,所以如果我不够清楚,请见谅。
我有一个通过辅助 API 公开的 ES (ElasticSearch) 服务。
辅助 API 负责检查内容的所有权和访问权限,这是通过标准 HTTP Authorization
和两个标识符 app_code
和 brand_code.
我们通过让辅助 API 接收由两个 "parts":
组成的请求来实现这一点- 用于所有权和访问验证的两个标识符。
- 一个普通的 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_code
和 brand_code
)解决了这个问题。
这是可能的,因为 ElasticSearch SDK 的构建方式基本上是作为常规 HTTP 客户端的包装器,对数据强制执行很少的必需结构。
这意味着我们可以简单地让外部开发人员使用 SDK,并让他们直接使用所需参数扩展数据。