Files
api-gateway/Техническое задание для AI-агента.md
2025-09-14 13:07:54 +05:00

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`.