### Техническое задание для AI-агента (Версия 2.0) **Задача:** Настроить Spring Cloud Gateway с маршрутом по умолчанию (fallback). **Контекст:** Необходимо обновить конфигурацию API Gateway. Теперь все запросы, которые не соответствуют ни одному из конкретных правил (например, для `/api/parser/**`), должны автоматически перенаправляться на `core-service`. Это делает `core-service` основным API, а остальные сервисы — расширениями для него. --- ## Основные требования 1. **Маршрутизация для `parser-service`**: - Все запросы, начинающиеся с `/api/parser/**`, должны перенаправляться на `http://parser-service:8080`. - Этот маршрут должен иметь **высокий приоритет**, чтобы он проверялся первым. 2. **Маршрутизация по умолчанию для `core-service`**: - **Любой другой запрос**, не подошедший под правило выше, должен перенаправляться на `http://core-service:8080`. - Этот маршрут должен иметь **самый низкий приоритет**, чтобы он срабатывал только в том случае, если ни один другой маршрут не подошел. - Префикс `/api/core/` больше не нужен, так как `core-service` теперь обрабатывает все остальные пути. --- ## Реализация и конфигурация Для реализации этого поведения необходимо использовать свойство `order` в конфигурации маршрутов. **Чем меньше значение `order`, тем выше приоритет.** Обновите файл `application.yml` следующим образом: ```yaml server: port: 80 # Стандартный HTTP порт для шлюза spring: application: name: api-gateway cloud: gateway: routes: # Маршрут для сервиса Parser (ВЫСОКИЙ ПРИОРИТЕТ) - id: parser-service uri: http://parser-service:8080 predicates: - Path=/api/parser/** filters: - StripPrefix=2 # Убираем /api/parser order: 1 # <-- Высокий приоритет # Маршрут по умолчанию для Core сервиса (НИЗКИЙ ПРИОРИТЕТ) - id: core-service-fallback uri: http://core-service:8080 predicates: - Path=/** # <-- Матчится со всеми путями order: 100 # <-- Низкий приоритет (сработает последним) # ... остальные настройки (CORS, logging) остаются без изменений ``` --- ## Объяснение логики 1. Когда на Gateway приходит запрос, например, `GET /api/parser/items`, он сначала проверяет маршрут с `order: 1`. 2. Запрос совпадает с `Path=/api/parser/**`, поэтому он отправляется на `parser-service`. 3. Когда приходит любой другой запрос, например `GET /users/profile`, он не совпадает с маршрутом для парсера. 4. Gateway продолжает проверку и находит маршрут с `order: 100`. 5. Этот маршрут совпадает с `Path=/**` (любой путь), и запрос уходит на `core-service`. --- ### Критерии выполнения - Запросы на `/api/parser/...` успешно уходят на `parser-service`. - Все остальные запросы (например, `/auth/login`, `/products`, `/anything-else`) успешно уходят на `core-service`.