75 lines
4.2 KiB
Markdown
75 lines
4.2 KiB
Markdown
### Техническое задание для 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`.
|