# Запросы для тестирования API приложения для безопасности женщин В этом файле собраны примеры всех API-запросов для тестирования серверной части микросервисного приложения. ## Содержание - [Общие запросы](#общие-запросы) - [Сервис пользователей (User Service)](#сервис-пользователей-user-service) - [Сервис экстренной помощи (Emergency Service)](#сервис-экстренной-помощи-emergency-service) - [Сервис геолокации (Location Service)](#сервис-геолокации-location-service) - [Сервис календаря (Calendar Service)](#сервис-календаря-calendar-service) - [Сервис уведомлений (Notification Service)](#сервис-уведомлений-notification-service) - [API Gateway](#api-gateway) ## Общие запросы ### Проверка доступности всех сервисов ```bash # Проверка 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) ### Регистрация нового пользователя ```bash 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 ``` ### Авторизация пользователя ```bash 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') ``` ### Получение информации о текущем пользователе ```bash curl -X GET http://localhost:8001/api/v1/users/me \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Обновление профиля пользователя ```bash 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 ``` ### Добавление контактов для экстренной связи ```bash 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 ``` ### Получение списка контактов для экстренной связи ```bash curl -X GET http://localhost:8001/api/v1/users/me/emergency-contacts \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Удаление контакта для экстренной связи ```bash # Замените {contact_id} на реальный ID контакта curl -X DELETE http://localhost:8001/api/v1/users/me/emergency-contacts/{contact_id} \ -H "Authorization: Bearer $TOKEN" ``` ### Изменение пароля ```bash 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 ```bash 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') ``` ### Получение активных оповещений пользователя ```bash curl -X GET http://localhost:8002/api/v1/emergency/alerts/my \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Отмена сигнала SOS ```bash # Замените {alert_id} на ID полученного ранее оповещения curl -X PATCH http://localhost:8002/api/v1/emergency/alerts/{alert_id}/cancel \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Получение списка ближайших оповещений (для волонтеров/служб) ```bash 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 ``` ### Отправка отчета о происшествии ```bash 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 ``` ### Получение списка отчетов о происшествиях в определенном радиусе ```bash 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) ### Обновление местоположения пользователя ```bash 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 ``` ### Получение последнего известного местоположения пользователя ```bash curl -X GET http://localhost:8003/api/v1/locations/last \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Получение истории перемещений пользователя ```bash 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 ``` ### Получение списка безопасных мест поблизости ```bash 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 ``` ### Добавление безопасного места ```bash 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 ``` ### Поиск пользователей в определенном радиусе (для экстренных ситуаций) ```bash 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) ### Создание записи в календаре ```bash 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 ``` ### Получение записей календаря за период ```bash 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 ``` ### Обновление записи в календаре ```bash # Замените {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 ``` ### Получение статистики и прогнозов ```bash curl -X GET http://localhost:8004/api/v1/calendar/statistics \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Получение прогноза следующего цикла ```bash curl -X GET http://localhost:8004/api/v1/calendar/predictions/next-cycle \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Настройка параметров календаря ```bash 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 ``` ### Получение настроек календаря ```bash curl -X GET http://localhost:8004/api/v1/calendar/settings \ -H "Authorization: Bearer $TOKEN" | jq ``` ## Сервис уведомлений (Notification Service) ### Регистрация устройства для Push-уведомлений ```bash 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 ``` ### Получение списка зарегистрированных устройств ```bash curl -X GET http://localhost:8005/api/v1/notifications/devices \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Удаление регистрации устройства ```bash # Замените {device_id} на реальный ID устройства curl -X DELETE http://localhost:8005/api/v1/notifications/devices/{device_id} \ -H "Authorization: Bearer $TOKEN" ``` ### Настройка предпочтений уведомлений ```bash 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 ``` ### Получение настроек уведомлений ```bash curl -X GET http://localhost:8005/api/v1/notifications/preferences \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Отправка тестового уведомления (только для тестирования) ```bash 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 ``` ### Получение истории уведомлений ```bash curl -X GET http://localhost:8005/api/v1/notifications/history \ -H "Authorization: Bearer $TOKEN" | jq ``` ## API Gateway ### Проверка статуса всех сервисов через Gateway ```bash curl -X GET http://localhost:8000/api/v1/status \ -H "Authorization: Bearer $TOKEN" | jq ``` ### Регистрация через Gateway ```bash 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 ```bash 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 ```bash 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 ```bash curl -X GET http://localhost:8000/api/v1/users/dashboard \ -H "Authorization: Bearer $GW_TOKEN" | jq ``` ## Bash скрипт для полного тестирования API Создайте файл `full_api_test.sh` со следующим содержимым: ```bash #!/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 Для запуска скрипта выполните следующие команды: ```bash chmod +x full_api_test.sh ./full_api_test.sh ```