All checks were successful
continuous-integration/drone/push Build is passing
23 KiB
23 KiB
Запросы для тестирования API приложения для безопасности женщин
В этом файле собраны примеры всех API-запросов для тестирования серверной части микросервисного приложения.
Содержание
- Общие запросы
- Сервис пользователей (User Service)
- Сервис экстренной помощи (Emergency Service)
- Сервис геолокации (Location Service)
- Сервис календаря (Calendar Service)
- Сервис уведомлений (Notification Service)
- API Gateway
Общие запросы
Проверка доступности всех сервисов
# Проверка API Gateway
curl -s http://localhost:8000/health | jq
# Проверка User Service
curl -s http://localhost:8001/health | jq
# Проверка Emergency Service
curl -s http://localhost:8002/health | jq
# Проверка Location Service
curl -s http://localhost:8003/health | jq
# Проверка Calendar Service
curl -s http://localhost:8004/health | jq
# Проверка Notification Service
curl -s http://localhost:8005/health | jq
# Альтернативные endpoint health
curl -s http://localhost:8000/api/v1/health | jq
curl -s http://localhost:8001/api/v1/health | jq
curl -s http://localhost:8002/api/v1/health | jq
curl -s http://localhost:8003/api/v1/health | jq
curl -s http://localhost:8004/api/v1/health | jq
curl -s http://localhost:8005/api/v1/health | jq
Сервис пользователей (User Service)
Регистрация нового пользователя
curl -X POST http://localhost:8001/api/v1/users/register \
-H "Content-Type: application/json" \
-d '{
"username": "usertest1",
"email": "user1@example.com",
"password": "SecurePass123!",
"full_name": "Тест Пользователь",
"phone_number": "+79001234567"
}' | jq
Авторизация пользователя
curl -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "usertest1",
"password": "SecurePass123!"
}' | jq
# Сохраните полученный токен в переменную для дальнейшего использования
# TOKEN=$(curl -s -X POST http://localhost:8001/api/v1/auth/login -H "Content-Type: application/json" -d '{"username": "usertest1", "password": "SecurePass123!"}' | jq -r '.access_token')
Получение информации о текущем пользователе
curl -X GET http://localhost:8001/api/v1/users/me \
-H "Authorization: Bearer $TOKEN" | jq
Обновление профиля пользователя
curl -X PATCH http://localhost:8001/api/v1/users/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"full_name": "Новое Имя Пользователя",
"phone_number": "+79009876543"
}' | jq
Добавление контактов для экстренной связи
curl -X POST http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Контакт для экстренной связи",
"phone_number": "+79001112233",
"relationship": "Друг"
}' | jq
Получение списка контактов для экстренной связи
curl -X GET http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Authorization: Bearer $TOKEN" | jq
Удаление контакта для экстренной связи
# Замените {contact_id} на реальный ID контакта
curl -X DELETE http://localhost:8001/api/v1/users/me/emergency-contacts/{contact_id} \
-H "Authorization: Bearer $TOKEN"
Изменение пароля
curl -X POST http://localhost:8001/api/v1/users/me/change-password \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"current_password": "SecurePass123!",
"new_password": "NewSecurePass456!"
}' | jq
Сервис экстренной помощи (Emergency Service)
Отправка сигнала SOS
curl -X POST http://localhost:8002/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Нужна срочная помощь!"
}' | jq
# Сохраните ID созданного оповещения для дальнейших действий
# ALERT_ID=$(curl -s -X POST http://localhost:8002/api/v1/emergency/alerts -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d '{"latitude": 55.7558, "longitude": 37.6173, "alert_type": "SOS", "message": "Нужна срочная помощь!"}' | jq -r '.id')
Получение активных оповещений пользователя
curl -X GET http://localhost:8002/api/v1/emergency/alerts/my \
-H "Authorization: Bearer $TOKEN" | jq
Отмена сигнала SOS
# Замените {alert_id} на ID полученного ранее оповещения
curl -X PATCH http://localhost:8002/api/v1/emergency/alerts/{alert_id}/cancel \
-H "Authorization: Bearer $TOKEN" | jq
Получение списка ближайших оповещений (для волонтеров/служб)
curl -X GET "http://localhost:8002/api/v1/emergency/alerts/nearby?latitude=55.7558&longitude=37.6173&radius=1.0" \
-H "Authorization: Bearer $TOKEN" | jq
Отправка отчета о происшествии
curl -X POST http://localhost:8002/api/v1/emergency/reports \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"report_type": "UNSAFE_AREA",
"description": "Тёмная улица без освещения",
"severity_level": "MEDIUM"
}' | jq
Получение списка отчетов о происшествиях в определенном радиусе
curl -X GET "http://localhost:8002/api/v1/emergency/reports/nearby?latitude=55.7558&longitude=37.6173&radius=5.0" \
-H "Authorization: Bearer $TOKEN" | jq
Сервис геолокации (Location Service)
Обновление местоположения пользователя
curl -X POST http://localhost:8003/api/v1/locations/update \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"accuracy": 10.0
}' | jq
Получение последнего известного местоположения пользователя
curl -X GET http://localhost:8003/api/v1/locations/last \
-H "Authorization: Bearer $TOKEN" | jq
Получение истории перемещений пользователя
curl -X GET "http://localhost:8003/api/v1/locations/history?start_date=2025-09-20T00:00:00Z&end_date=2025-09-25T23:59:59Z" \
-H "Authorization: Bearer $TOKEN" | jq
Получение списка безопасных мест поблизости
curl -X GET "http://localhost:8003/api/v1/locations/safe-places?latitude=55.7558&longitude=37.6173&radius=1.0" \
-H "Authorization: Bearer $TOKEN" | jq
Добавление безопасного места
curl -X POST http://localhost:8003/api/v1/locations/safe-places \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Полицейский участок",
"latitude": 55.7559,
"longitude": 37.6174,
"place_type": "POLICE",
"description": "Центральный полицейский участок"
}' | jq
Поиск пользователей в определенном радиусе (для экстренных ситуаций)
curl -X GET "http://localhost:8003/api/v1/locations/users/nearby?latitude=55.7558&longitude=37.6173&radius=0.5" \
-H "Authorization: Bearer $TOKEN" | jq
Сервис календаря (Calendar Service)
Создание записи в календаре
curl -X POST http://localhost:8004/api/v1/calendar/entries \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"entry_date": "2025-10-01",
"cycle_day": 1,
"symptoms": ["HEADACHE", "FATIGUE"],
"mood": "NORMAL",
"notes": "Начало цикла"
}' | jq
Получение записей календаря за период
curl -X GET "http://localhost:8004/api/v1/calendar/entries?start_date=2025-09-01&end_date=2025-10-31" \
-H "Authorization: Bearer $TOKEN" | jq
Обновление записи в календаре
# Замените {entry_id} на реальный ID записи
curl -X PATCH http://localhost:8004/api/v1/calendar/entries/{entry_id} \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"symptoms": ["HEADACHE", "FATIGUE", "BLOATING"],
"mood": "IRRITABLE",
"notes": "Обновленная запись"
}' | jq
Получение статистики и прогнозов
curl -X GET http://localhost:8004/api/v1/calendar/statistics \
-H "Authorization: Bearer $TOKEN" | jq
Получение прогноза следующего цикла
curl -X GET http://localhost:8004/api/v1/calendar/predictions/next-cycle \
-H "Authorization: Bearer $TOKEN" | jq
Настройка параметров календаря
curl -X POST http://localhost:8004/api/v1/calendar/settings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"average_cycle_length": 28,
"average_period_length": 5,
"notification_enabled": true,
"notification_days_before": 2
}' | jq
Получение настроек календаря
curl -X GET http://localhost:8004/api/v1/calendar/settings \
-H "Authorization: Bearer $TOKEN" | jq
Сервис уведомлений (Notification Service)
Регистрация устройства для Push-уведомлений
curl -X POST http://localhost:8005/api/v1/notifications/devices \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"device_token": "fcm-token-example-123456",
"device_type": "ANDROID",
"app_version": "1.0.0"
}' | jq
Получение списка зарегистрированных устройств
curl -X GET http://localhost:8005/api/v1/notifications/devices \
-H "Authorization: Bearer $TOKEN" | jq
Удаление регистрации устройства
# Замените {device_id} на реальный ID устройства
curl -X DELETE http://localhost:8005/api/v1/notifications/devices/{device_id} \
-H "Authorization: Bearer $TOKEN"
Настройка предпочтений уведомлений
curl -X POST http://localhost:8005/api/v1/notifications/preferences \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"emergency_alerts": true,
"nearby_incidents": true,
"calendar_reminders": true,
"system_notifications": true
}' | jq
Получение настроек уведомлений
curl -X GET http://localhost:8005/api/v1/notifications/preferences \
-H "Authorization: Bearer $TOKEN" | jq
Отправка тестового уведомления (только для тестирования)
curl -X POST http://localhost:8005/api/v1/notifications/test \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"title": "Тестовое уведомление",
"body": "Это тестовое push-уведомление",
"data": {
"type": "TEST",
"action": "OPEN_APP"
}
}' | jq
Получение истории уведомлений
curl -X GET http://localhost:8005/api/v1/notifications/history \
-H "Authorization: Bearer $TOKEN" | jq
API Gateway
Проверка статуса всех сервисов через Gateway
curl -X GET http://localhost:8000/api/v1/status \
-H "Authorization: Bearer $TOKEN" | jq
Регистрация через Gateway
curl -X POST http://localhost:8000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "gatewayuser",
"email": "gateway@example.com",
"password": "GatewayPass123!",
"full_name": "Gateway Test User",
"phone_number": "+79991234567"
}' | jq
Авторизация через Gateway
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "gatewayuser",
"password": "GatewayPass123!"
}' | jq
# Сохраните полученный токен в переменную для дальнейшего использования
# GW_TOKEN=$(curl -s -X POST http://localhost:8000/api/v1/auth/login -H "Content-Type: application/json" -d '{"username": "gatewayuser", "password": "GatewayPass123!"}' | jq -r '.access_token')
Создание экстренного оповещения через Gateway
curl -X POST http://localhost:8000/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GW_TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Тестовое экстренное оповещение через Gateway"
}' | jq
Комплексный запрос данных пользователя через Gateway
curl -X GET http://localhost:8000/api/v1/users/dashboard \
-H "Authorization: Bearer $GW_TOKEN" | jq
Bash скрипт для полного тестирования API
Создайте файл full_api_test.sh со следующим содержимым:
#!/bin/bash
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}=======================================${NC}"
echo -e "${YELLOW}🔍 Полное тестирование API приложения ${NC}"
echo -e "${YELLOW}=======================================${NC}"
# 1. Проверка доступности сервисов
echo -e "\n${GREEN}1. Проверка доступности сервисов${NC}"
services=(
"http://localhost:8000"
"http://localhost:8001"
"http://localhost:8002"
"http://localhost:8003"
"http://localhost:8004"
"http://localhost:8005"
)
service_names=(
"API Gateway"
"User Service"
"Emergency Service"
"Location Service"
"Calendar Service"
"Notification Service"
)
for i in ${!services[@]}; do
echo -n "Проверка ${service_names[$i]} (${services[$i]})... "
if curl -s "${services[$i]}/health" | grep -q "status.*healthy" || curl -s "${services[$i]}/api/v1/health" | grep -q "status.*healthy"; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}НЕДОСТУПНО${NC}"
echo "Продолжение тестирования может вызвать ошибки. Хотите продолжить? (y/n)"
read continue_test
if [[ $continue_test != "y" ]]; then
exit 1
fi
fi
done
# 2. Регистрация и авторизация
echo -e "\n${GREEN}2. Регистрация и авторизация${NC}"
echo "Регистрация тестового пользователя..."
REGISTER_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/users/register \
-H "Content-Type: application/json" \
-d '{
"username": "apitest",
"email": "apitest@example.com",
"password": "ApiTest123!",
"full_name": "API Test User",
"phone_number": "+79997776655"
}')
echo $REGISTER_RESPONSE | jq
# Авторизация
echo "Авторизация тестового пользователя..."
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "apitest",
"password": "ApiTest123!"
}')
echo $LOGIN_RESPONSE | jq
TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')
if [[ $TOKEN == "null" || -z $TOKEN ]]; then
echo -e "${RED}Не удалось получить токен авторизации. Тестирование будет остановлено.${NC}"
exit 1
else
echo -e "${GREEN}Успешно получен токен авторизации${NC}"
fi
# 3. Обновление профиля
echo -e "\n${GREEN}3. Обновление профиля пользователя${NC}"
curl -s -X PATCH http://localhost:8001/api/v1/users/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"full_name": "Обновленное Имя",
"phone_number": "+79997776655"
}' | jq
# 4. Добавление контактов экстренной связи
echo -e "\n${GREEN}4. Добавление контакта для экстренной связи${NC}"
CONTACT_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Экстренный контакт",
"phone_number": "+79991112233",
"relationship": "Родственник"
}')
echo $CONTACT_RESPONSE | jq
CONTACT_ID=$(echo $CONTACT_RESPONSE | jq -r '.id')
# 5. Получение списка контактов
echo -e "\n${GREEN}5. Получение списка экстренных контактов${NC}"
curl -s -X GET http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Authorization: Bearer $TOKEN" | jq
# 6. Обновление местоположения пользователя
echo -e "\n${GREEN}6. Обновление местоположения пользователя${NC}"
curl -s -X POST http://localhost:8003/api/v1/locations/update \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"accuracy": 10.0
}' | jq
# 7. Получение последнего местоположения
echo -e "\n${GREEN}7. Получение последнего местоположения${NC}"
curl -s -X GET http://localhost:8003/api/v1/locations/last \
-H "Authorization: Bearer $TOKEN" | jq
# 8. Создание экстренного оповещения
echo -e "\n${GREEN}8. Создание экстренного оповещения${NC}"
ALERT_RESPONSE=$(curl -s -X POST http://localhost:8002/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Тестовое экстренное оповещение"
}')
echo $ALERT_RESPONSE | jq
ALERT_ID=$(echo $ALERT_RESPONSE | jq -r '.id')
# 9. Получение активных оповещений
echo -e "\n${GREEN}9. Получение активных оповещений пользователя${NC}"
curl -s -X GET http://localhost:8002/api/v1/emergency/alerts/my \
-H "Authorization: Bearer $TOKEN" | jq
# 10. Отмена экстренного оповещения
if [[ $ALERT_ID != "null" && -n $ALERT_ID ]]; then
echo -e "\n${GREEN}10. Отмена экстренного оповещения${NC}"
curl -s -X PATCH http://localhost:8002/api/v1/emergency/alerts/$ALERT_ID/cancel \
-H "Authorization: Bearer $TOKEN" | jq
fi
# 11. Создание записи в календаре
echo -e "\n${GREEN}11. Создание записи в календаре${NC}"
CALENDAR_RESPONSE=$(curl -s -X POST http://localhost:8004/api/v1/calendar/entries \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"entry_date": "2025-10-01",
"cycle_day": 1,
"symptoms": ["HEADACHE", "FATIGUE"],
"mood": "NORMAL",
"notes": "Тестовая запись в календаре"
}')
echo $CALENDAR_RESPONSE | jq
# 12. Получение записей календаря
echo -e "\n${GREEN}12. Получение записей календаря${NC}"
curl -s -X GET "http://localhost:8004/api/v1/calendar/entries?start_date=2025-09-01&end_date=2025-10-31" \
-H "Authorization: Bearer $TOKEN" | jq
# 13. Регистрация устройства для уведомлений
echo -e "\n${GREEN}13. Регистрация устройства для уведомлений${NC}"
DEVICE_RESPONSE=$(curl -s -X POST http://localhost:8005/api/v1/notifications/devices \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"device_token": "fcm-test-token-123",
"device_type": "ANDROID",
"app_version": "1.0.0"
}')
echo $DEVICE_RESPONSE | jq
# 14. Настройка предпочтений уведомлений
echo -e "\n${GREEN}14. Настройка предпочтений уведомлений${NC}"
curl -s -X POST http://localhost:8005/api/v1/notifications/preferences \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"emergency_alerts": true,
"nearby_incidents": true,
"calendar_reminders": true,
"system_notifications": true
}' | jq
# 15. Получение данных пользователя через Gateway
echo -e "\n${GREEN}15. Получение данных пользователя через Gateway${NC}"
curl -s -X GET http://localhost:8000/api/v1/users/dashboard \
-H "Authorization: Bearer $TOKEN" | jq
echo -e "\n${YELLOW}=======================================${NC}"
echo -e "${GREEN}✅ Тестирование API завершено успешно${NC}"
echo -e "${YELLOW}=======================================${NC}"
Использование Bash скрипта для полного тестирования API
Для запуска скрипта выполните следующие команды:
chmod +x full_api_test.sh
./full_api_test.sh