Обертывание ElasticSearch SDK в фасаде, чтобы включить дополнительную информацию о некоторых вызовах
Это требует немного базовых знаний, поэтому я прошу прощения, если я не достаточно ясно.
У меня есть сервис ES (ElasticSearch), который предоставляется через вторичный API.
Вторичный API отвечает за проверку владения и доступа к контенту, это делается через стандартный HTTP Authorization
и два идентификатора app_code
и brand_code.
У нас это реализовано, когда вторичный API принимает запрос, состоящий из двух "частей":
- Два идентификатора используются для владения и проверки доступа.
- Обычный запрос ES, который мы передаем напрямую в наш сервис ES, если авторизация может быть подтверждена.
Запрос:
{
app_code: mobile,
brand_code: fashion,
query: {
// Standard ES Query
}
}
У нас есть много внешних разработчиков, которым необходимо использовать наш сервис ElasticSearch - так как мы хотим помочь упростить их практику, предоставляя SDK.
Но было бы глупо разрабатывать собственный SDK для ES, так как это уже было сделано и с открытым исходным кодом. Поэтому мы попытались обернуть текущий ES SDK в своего рода "фасад-SDK", который бы просто включал в каждый запрос app_code и brand_code.
Это, однако, приводит к значительному обслуживанию, поскольку теперь нам нужно взять каждый метод в исходном ES-SDK и изменить его, чтобы теперь также включать в себя два других идентификатора.
TL: DR - необходимо обернуть другой SDK для отправки дополнительной информации с каждым запросом. В настоящее время используется фасадный подход, но в итоге требуется слишком много обслуживания.
Являются ли фасады правильным способом? Возможно, мы упускаем какой-то более простой вариант или это просто необходимое усилие?
1 ответ
Решил этот вопрос, установив (app_code
а также brand_code
) просто распространяется на каждый запрос, встроенный в SDK.
Это стало возможным благодаря тому, что был создан ElasticSearch SDK, в основном как обертка для обычного HTTP-клиента, обеспечивающего очень мало необходимой структуры данных.
Это означало, что мы могли просто попросить внешних разработчиков использовать SDK и напрямую дополнить данные требуемыми параметрами.