Files
ApiGatewayTest/README.md
T
2026-01-04 23:01:46 +03:00

314 lines
8.2 KiB
Markdown

# Примеры тестирования микросервисов через API Gateway
## Структура проекта
```
.
├── service-1-main.py # User Service
├── service-2-main.py # Order Service
├── requirements.txt # Зависимости
├── Dockerfile.service1 # Docker образ для Service 1
├── Dockerfile.service2 # Docker образ для Service 2
└── docker-compose.yaml # Конфигурация Docker Compose
```
## Запуск контейнеров
```bash
# Построить образы и запустить контейнеры
docker-compose up --build
# Запустить в фоновом режиме
docker-compose up -d --build
# Просмотреть логи
docker-compose logs -f
# Остановить контейнеры
docker-compose down
```
## Service 1 - User Service (порт 8001)
### Health Check
```bash
curl http://localhost:8001/
curl http://localhost:8001/health
```
### Получить список пользователей
```bash
curl http://localhost:8001/users
```
### Получить пользователя по ID
```bash
curl http://localhost:8001/users/1
```
### Создать нового пользователя
```bash
curl -X POST http://localhost:8001/users \
-H "Content-Type: application/json" \
-d '{
"name": "Петр Иванов",
"email": "petr@example.com",
"age": 30
}'
```
### Обновить пользователя
```bash
curl -X PUT http://localhost:8001/users/1 \
-H "Content-Type: application/json" \
-d '{
"name": "Иван Петров (обновлено)",
"email": "ivan.updated@example.com",
"age": 29
}'
```
### Удалить пользователя
```bash
curl -X DELETE http://localhost:8001/users/1
```
### Получить статистику
```bash
curl http://localhost:8001/stats
```
## Service 2 - Order Service (порт 8002)
### Health Check
```bash
curl http://localhost:8002/
curl http://localhost:8002/health
```
### Получить список продуктов
```bash
curl http://localhost:8002/products
```
### Получить продукт по ID
```bash
curl http://localhost:8002/products/1
```
### Создать новый продукт
```bash
curl -X POST http://localhost:8002/products \
-H "Content-Type: application/json" \
-d '{
"name": "Мышка беспроводная",
"price": 1500.00,
"quantity": 20
}'
```
### Обновить продукт
```bash
curl -X PUT http://localhost:8002/products/1 \
-H "Content-Type: application/json" \
-d '{
"name": "Ноутбук (обновлено)",
"price": 55000.00,
"quantity": 3
}'
```
### Удалить продукт
```bash
curl -X DELETE http://localhost:8002/products/1
```
### Получить список заказов
```bash
curl http://localhost:8002/orders
```
### Получить заказ по ID
```bash
curl http://localhost:8002/orders/1
```
### Создать новый заказ
```bash
curl -X POST http://localhost:8002/orders \
-H "Content-Type: application/json" \
-d '{
"user_id": 2,
"product_id": 2,
"quantity": 2
}'
```
### Получить статистику
```bash
curl http://localhost:8002/stats
```
## Тестирование через Python requests
```python
import requests
import json
BASE_URL_SERVICE1 = "http://localhost:8001"
BASE_URL_SERVICE2 = "http://localhost:8002"
# Проверка здоровья Service 1
response = requests.get(f"{BASE_URL_SERVICE1}/health")
print(f"Service 1 Health: {response.json()}")
# Получение всех пользователей
response = requests.get(f"{BASE_URL_SERVICE1}/users")
print(f"Users: {response.json()}")
# Создание пользователя
user_data = {
"name": "Тест Пользователь",
"email": "test@example.com",
"age": 25
}
response = requests.post(f"{BASE_URL_SERVICE1}/users", json=user_data)
print(f"Created User: {response.json()}")
# Проверка здоровья Service 2
response = requests.get(f"{BASE_URL_SERVICE2}/health")
print(f"Service 2 Health: {response.json()}")
# Получение всех продуктов
response = requests.get(f"{BASE_URL_SERVICE2}/products")
print(f"Products: {response.json()}")
# Создание заказа
order_data = {
"user_id": 1,
"product_id": 3,
"quantity": 5
}
response = requests.post(f"{BASE_URL_SERVICE2}/orders", json=order_data)
print(f"Created Order: {response.json()}")
```
## Конфигурация API Gateway
Для проверки работы API Gateway, вы можете использовать:
1. **Kong** - популярный API Gateway
2. **NGINX** - простой и быстрый
3. **Traefik** - автоматическое обнаружение сервисов
4. **AWS API Gateway** - облачное решение
### Пример конфигурации NGINX
```nginx
upstream service1 {
server service-1:8001;
}
upstream service2 {
server service-2:8002;
}
server {
listen 8000;
server_name localhost;
location /api/users {
proxy_pass http://service1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/products {
proxy_pass http://service2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/orders {
proxy_pass http://service2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
## Основные характеристики микросервисов
### Service 1 - User Service
- **Порт**: 8001
- **Функционал**: Управление пользователями (CRUD)
- **Endpoints**:
- `GET /` - Проверка статуса
- `GET /health` - Health check
- `GET /users` - Список пользователей
- `GET /users/{id}` - Получить пользователя
- `POST /users` - Создать пользователя
- `PUT /users/{id}` - Обновить пользователя
- `DELETE /users/{id}` - Удалить пользователя
- `GET /stats` - Статистика
### Service 2 - Order Service
- **Порт**: 8002
- **Функционал**: Управление продуктами и заказами (CRUD)
- **Endpoints**:
- `GET /` - Проверка статуса
- `GET /health` - Health check
- `GET /products` - Список продуктов
- `GET /products/{id}` - Получить продукт
- `POST /products` - Создать продукт
- `PUT /products/{id}` - Обновить продукт
- `DELETE /products/{id}` - Удалить продукт
- `GET /orders` - Список заказов
- `GET /orders/{id}` - Получить заказ
- `POST /orders` - Создать заказ
- `GET /stats` - Статистика
## Логирование и мониторинг
Оба сервиса включают:
- Встроенное логирование (INFO уровень)
- Health check endpoints
- Метрики статистики
- Документацию Swagger (автоматическая генерация)
### Доступ к Swagger документации
- Service 1: `http://localhost:8001/docs`
- Service 2: `http://localhost:8002/docs`
## Отладка
```bash
# Проверить статус контейнеров
docker-compose ps
# Просмотреть логи конкретного сервиса
docker-compose logs service-1
docker-compose logs service-2
# Подключиться к контейнеру
docker-compose exec service-1 /bin/bash
# Проверить сетевое подключение между сервисами
docker-compose exec service-1 curl http://service-2:8002/health
```
## Требования
- Docker 20.10+
- Docker Compose 2.0+
- Python 3.11+ (для локального запуска без Docker)
- curl или PostMan для тестирования API
## Лицензия
MIT