🧛 Тёмная сторона обратной совместимости
Когда мы говорим, что API какого-либо сервиса имеет обратную совместимость, то обычно в голове всплывает картина, что в параметры API были добавлены новые необязательные параметры или что, на худой конец, в ответе добавилось что-то дополнительное, что можно проигнорировать. Но в обоих случаях действующие потребители могут без изменений продолжать потреблять этот API, не ломаясь. В общем, забота о потребителях, улучшение пользовательского опыта и прочая благодать.
С одной стороны да, и многие книги учат именно по такой логике развивать свои API, чтобы зазря не травмировать потребителей. Но на днях я столкнулся с другой стороной этого вопроса. Об этом и хотелось рассказать в этот замечательный вечер🎃.
Каждый API в общем случае предполагает передачу в запросе одних данных и получение в ответе других. Все данные в зависимости от их характера могут быть классифицированы по уровню конфиденциальности, критичности и любым другим признакам, какие сочтут полезными в вашей организации. Работа с разными категориями информации может налагать различные обязательства на процесс контрактования, согласование доступа и т.п. Пока противоречий не прослеживается, но они вскроются буквально в двух следующих абзацах.
Теперь представим, что ваша система потребляет некий API (микросервисная тут архитектура или нет — не суть), это взаимодействие было согласовано и должным образом учтено. При этом данный API не является приватным в том смысле, что это не взаимодействие между двумя вашими внутренними модулями. Соответственно, помимо вашей системы есть и иные потребители.
И вот в один прекрасный момент по той или иной причине API дорабатывается так, что ответ дообогащается новыми данными, причём эти данные относятся к более высокой категории (например, появляются сведения более высокого уровня конфиденциальности). Что мы имеем: после такой доработки к новым потребителям API вполне могут предъявляться повышенные требования, но ваша система спокойно продолжает потреблять API, обрабатывая из ответа ровно то, что и планировалось изначально, хотя в действительности в ответе получает и то, на что могла не иметь права. Более того, благодаря обратной совместимости вы ещё долго можете об этом не знать.
Выводы.
1️⃣ Описанная ситуация не универсальна и в ряде случаев на практике невозможна. В то же время держать её в голове точно не помешает.
2️⃣ При некоторых обстоятельствах общеупотребимые подходы и хорошие практики могут оказаться не такими уж и хорошими. Как минимум, они могут нуждаться в дополнительных действиях, нейтрализующих нежелательные эффекты.
#интеграции #сервисы
Post #168
309
- 🔥 5