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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Версія для друку більше не підтримується і може мати помилки обробки. Будь ласка, оновіть свої закладки браузера, а також використовуйте натомість базову функцію друку у браузері.

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

Опис

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

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

API Gateway

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

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

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

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

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

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

Backends for frontends

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

Див. також

Джерела