这需要一点背景知识,所以如果我不够清楚,我很抱歉。
我有一个通过二级API公开的ES(ElasticSearch)服务。
辅助API负责检查内容的所有权和访问权限,这是通过标准HTTP Authorization
和两个标识符app_code
和brand_code.
来完成的
我们通过让二级API接受由两个"部分"组成的请求来实现这一点:
- 用于所有权和访问验证的两个标识符
- 一个正常的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,并让他们使用所需的参数直接扩展数据。