2026-01-04 23:01:46 +03:00
2026-01-04 23:01:46 +03:00
2026-01-04 23:01:46 +03:00
2026-01-04 23:01:46 +03:00
2026-01-04 22:52:04 +03:00
2026-01-04 23:01:46 +03:00
2026-01-04 23:01:46 +03:00
2026-01-04 23:01:46 +03:00

Примеры тестирования микросервисов через 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

Запуск контейнеров

# Построить образы и запустить контейнеры
docker-compose up --build

# Запустить в фоновом режиме
docker-compose up -d --build

# Просмотреть логи
docker-compose logs -f

# Остановить контейнеры
docker-compose down

Service 1 - User Service (порт 8001)

Health Check

curl http://localhost:8001/
curl http://localhost:8001/health

Получить список пользователей

curl http://localhost:8001/users

Получить пользователя по ID

curl http://localhost:8001/users/1

Создать нового пользователя

curl -X POST http://localhost:8001/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Петр Иванов",
    "email": "petr@example.com",
    "age": 30
  }'

Обновить пользователя

curl -X PUT http://localhost:8001/users/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Иван Петров (обновлено)",
    "email": "ivan.updated@example.com",
    "age": 29
  }'

Удалить пользователя

curl -X DELETE http://localhost:8001/users/1

Получить статистику

curl http://localhost:8001/stats

Service 2 - Order Service (порт 8002)

Health Check

curl http://localhost:8002/
curl http://localhost:8002/health

Получить список продуктов

curl http://localhost:8002/products

Получить продукт по ID

curl http://localhost:8002/products/1

Создать новый продукт

curl -X POST http://localhost:8002/products \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Мышка беспроводная",
    "price": 1500.00,
    "quantity": 20
  }'

Обновить продукт

curl -X PUT http://localhost:8002/products/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ноутбук (обновлено)",
    "price": 55000.00,
    "quantity": 3
  }'

Удалить продукт

curl -X DELETE http://localhost:8002/products/1

Получить список заказов

curl http://localhost:8002/orders

Получить заказ по ID

curl http://localhost:8002/orders/1

Создать новый заказ

curl -X POST http://localhost:8002/orders \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": 2,
    "product_id": 2,
    "quantity": 2
  }'

Получить статистику

curl http://localhost:8002/stats

Тестирование через Python requests

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

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

Отладка

# Проверить статус контейнеров
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

Description
Минимально жизнеспособный пример работы api gateway
Readme AGPL-3.0 61 KiB
Languages
Python 100%