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

Опис ред.

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

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

 

API Gateway ред.

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

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

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

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

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

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

Backends for frontends ред.

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

 

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

Джерела ред.