Шлюз (шаблон проєктування)
Ця стаття не має інтервікі-посилань. |
Шлюз (англ. Gateway) — шаблон проєктування, який інкапсулює доступ до зовнішнього ресурсу.
Опис[ред. | ред. код]
Часто при взаємодії із зовнішніми ресурсами використовується API. Але будь-який API написаний таким чином, що розкриває структуру самого ресурсу, будь то SQL до реляційних баз даних, або ж JSON чи XAML, тощо. Змішуючи різні API програмний код стає заплутанішим та важче піддається змінам.
У широкому розумінні шлюз є об'єктом, що приховує різноманітні API та уніфіковує доступ до ресурсів.
API Gateway[ред. | ред. код]
Цей шаблон не без причин набув великої популярності при реалізації мікросервісної архітектури. При наявності декількох сервісів клієнту необхідно взаємодіяти із ними усіма. Конфігурація клієнтів ускладнюється ще й тим, що API різних сервісів може відрізнятись.
Використання шлюзу у цьому випадку надає декілька переваг:
- Спрощується налаштування клієнта, конфігурацію залишаються на стороні сервера
- Для клієнта робота із системою виглядає так ніби відбувається взаємодія з одним компонентом, а не багатьма. Таким чином серверна частина має єдину точку взаємодії
- Клієнт не знає про внутрішню архітектуру та взаємодію системи. Gateway передає дані тому сервісу, який їх потребує по вірному каналу зв’язку
- Зміни розташування сервісів залишаються непомітними для клієнта
- Більше не потрібно реалізовувати логіку автентифікації для кожного сервісу, її може виконувати шлюз
- Зменшує кількість запитів та навантаження, оскільки дозволяє зібрати дані із декількох сервісів та об'єднати їх у потрібний для клієнта формат
При цьому не варто забувати про недоліки такого підходу:
- Наявність ще одного сервісу, який необхідно підтримувати
- Збільшується час відгуку через те, що кожний запит проходить через шлюз
Backends for frontends[ред. | ред. код]
Одною із різновидностей цього шаблону є 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.]