Это требует немного базовых знаний, поэтому я прошу прощения, если я не достаточно ясно.
У меня есть сервис ES (ElasticSearch), который предоставляется через вторичный API.
Вторичный API отвечает за проверку владения и доступа к контенту, это делается через стандартный HTTP Authorization
и два идентификатора app_code
и brand_code.
У нас это реализовано, когда вторичный API принимает запрос, состоящий из двух «частей»:
Запрос:
{
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 для отправки дополнительной информации с каждым запросом. В настоящее время используется фасадный подход, но в итоге требуется слишком много обслуживания.
Являются ли фасады правильным способом? Возможно, мы упускаем какой-то более простой вариант или это просто необходимое усилие?
Решил этот вопрос, установив (app_code
а также brand_code
) просто распространяется на каждый запрос, встроенный в SDK.
Это стало возможным благодаря тому, как был создан ElasticSearch SDK, в основном как обертка для обычного HTTP-клиента, обеспечивающего очень мало необходимой структуры данных.
Это означало, что мы могли просто попросить внешних разработчиков использовать SDK и напрямую дополнить данные требуемыми параметрами.
Других решений пока нет …