Шлюз (шаблон проєктування)
Ця стаття не має інтервікі-посилань. |
Шлюз (англ. Gateway) — шаблон проєктування, який інкапсулює доступ до зовнішнього ресурсу.
Часто при взаємодії із зовнішніми ресурсами використовується API. Але будь-який API написаний таким чином, що розкриває структуру самого ресурсу, будь то SQL до реляційних баз даних, або ж JSON чи XAML, тощо. Змішуючи різні API програмний код стає заплутанішим та важче піддається змінам.
У широкому розумінні шлюз є об'єктом, що приховує різноманітні API та уніфіковує доступ до ресурсів.
Цей шаблон не без причин набув великої популярності при реалізації мікросервісної архітектури. При наявності декількох сервісів клієнту необхідно взаємодіяти із ними усіма. Конфігурація клієнтів ускладнюється ще й тим, що API різних сервісів може відрізнятись.
Використання шлюзу у цьому випадку надає декілька переваг:
- Спрощується налаштування клієнта, конфігурацію залишаються на стороні сервера
- Для клієнта робота із системою виглядає так ніби відбувається взаємодія з одним компонентом, а не багатьма. Таким чином серверна частина має єдину точку взаємодії
- Клієнт не знає про внутрішню архітектуру та взаємодію системи. Gateway передає дані тому сервісу, який їх потребує по вірному каналу зв’язку
- Зміни розташування сервісів залишаються непомітними для клієнта
- Більше не потрібно реалізовувати логіку автентифікації для кожного сервісу, її може виконувати шлюз
- Зменшує кількість запитів та навантаження, оскільки дозволяє зібрати дані із декількох сервісів та об'єднати їх у потрібний для клієнта формат
При цьому не варто забувати про недоліки такого підходу:
- Наявність ще одного сервісу, який необхідно підтримувати
- Збільшується час відгуку через те, що кожний запит проходить через шлюз
Одною із різновидностей цього шаблону є Backends for frontends (BFF). Оскільки різні клієнти можуть потребувати різний API для своєї роботи, варто виокремити специфічну логіку в окремі сервіси.
- Прикладний програмний інтерфейс
- Адаптер (шаблон проєктування)
- Замісник (шаблон проєктування)
- Фасад (шаблон проєктування)
- Мікросервіси
- Front end та back end
- Gateway [Архівовано 16 листопада 2020 у Wayback Machine.]
- API Gateway [Архівовано 8 листопада 2020 у Wayback Machine.]
- Застосування API Gateway [Архівовано 15 листопада 2020 у Wayback Machine.]