Прежде чем писать код, важно понять, какую проблему мы решаем. Без API Gateway каждый клиент (веб-приложение, мобильное приложение, партнёрская интеграция) должен знать адреса всех backend-сервисов и самостоятельно реализовывать общую логику: добавление токенов, обработку ошибок, повторные попытки. Это как если бы пассажир при каждом перелёте должен был самостоятельно связываться с диспетчером, пилотом, службой безопасности и багажным отделением, вместо того чтобы пройти регистрацию в аэропорту.
— это единая точка входа для всех клиентов. Вместо того чтобы клиент общался напрямую с десятком микросервисов, он отправляет все запросы на один адрес. Gateway принимает запрос, определяет, какому сервису он предназначен, и перенаправляет его.
Реальные примеры:
Зачем это нужно:
— это функциональность, которая нужна везде, но не относится к бизнес-логике конкретного сервиса. Примеры:
Без gateway каждый сервис должен реализовывать эту логику самостоятельно. С gateway — она централизована в одном месте. Это как пост охраны на входе в бизнес-центр: проверяет пропуска, записывает посетителей, следит за порядком — и делает это для всех офисов сразу.
Зачем: Зафиксировать архитектурное решение о введении API Gateway в README до написания кода — чтобы иметь ясное представление о роли gateway и его функциях.
Что делаем:
Обновите README.md проекта. Добавьте в него:
Сравнение архитектуры без gateway и с gateway:
Без API Gateway:
Frontend ──┬── auth-service:8081/api/v1/auth/login
├── auth-service:8081/api/v1/users/me
├── books-service:8082/api/v1/books
└── books-service:8082/api/v1/books/123/reviews
С API Gateway:
Frontend ──── gateway:8000/api/v1/* ──┬── auth-service:8081
└── books-service:8082
Frontend знает только gateway:8000, всё остальное — внутренняя кухня.
README.md существует в корне проекта и содержит описание API GatewayREADME.md описана роль gateway как единой точки входа для всех клиентских запросовREADME.md перечислены сквозные функции gateway: CORS, rate limiting, logging, caching