Шлюз (шаблон проєктування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Шлюз (англ. Gateway) — шаблон проєктування, який інкапсулює доступ до зовнішнього ресурсу.

Опис[ред. | ред. код]

Часто при взаємодії із зовнішніми ресурсами використовується API. Але будь-який API написаний таким чином, що розкриває структуру самого ресурсу, будь то SQL до реляційних баз даних, або ж JSON чи XAML, тощо. Змішуючи різні API програмний код стає заплутанішим та важче піддається змінам.

У широкому розумінні шлюз є об'єктом, що приховує різноманітні API та уніфіковує доступ до ресурсів.

API Gateway[ред. | ред. код]

Цей шаблон не без причин набув великої популярності при реалізації мікросервісної архітектури. При наявності декількох сервісів клієнту необхідно взаємодіяти із ними усіма. Конфігурація клієнтів ускладнюється ще й тим, що API різних сервісів може відрізнятись.

Приклад взаємодії між клієнтом та сервером без реалізації API Gateway та з ним.

Використання шлюзу у цьому випадку надає декілька переваг:

  • Спрощується налаштування клієнта, конфігурацію залишаються на стороні сервера
  • Для клієнта робота із системою виглядає так ніби відбувається взаємодія з одним компонентом, а не багатьма. Таким чином серверна частина має єдину точку взаємодії
  • Клієнт не знає про внутрішню архітектуру та взаємодію системи. Gateway передає дані тому сервісу, який їх потребує по вірному каналу зв’язку
  • Зміни розташування сервісів залишаються непомітними для клієнта
  • Більше не потрібно реалізовувати логіку автентифікації для кожного сервісу, її може виконувати шлюз
  • Зменшує кількість запитів та навантаження, оскільки дозволяє зібрати дані із декількох сервісів та об'єднати їх у потрібний для клієнта формат

При цьому не варто забувати про недоліки такого підходу:

  • Наявність ще одного сервісу, який необхідно підтримувати
  • Збільшується час відгуку через те, що кожний запит проходить через шлюз

Backends for frontends[ред. | ред. код]

Одною із різновидностей цього шаблону є Backends for frontends (BFF). Оскільки різні клієнти можуть потребувати різний API для своєї роботи, варто виокремити специфічну логіку в окремі сервіси.

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]