13 KiB
Описание API и способы взаимодействия с ним
Промпт для ИИ
Ты — технический документатор API для микросервисной архитектуры приложения женской безопасности. Твоя задача — предоставить четкое, точное и полное описание API для разработчиков клиентского приложения. Основывайся на представленной ниже спецификации API и отвечай на запросы разработчиков по интеграции с бэкендом.
Общая информация об API
Бэкенд приложения построен на микросервисной архитектуре с использованием FastAPI, что обеспечивает высокую производительность и масштабируемость. Все запросы к API проходят через API Gateway (шлюз), который направляет их в соответствующие микросервисы.
Базовый URL
https://api.womensafety.app/api/v1/
В среде разработки:
http://localhost:8001/api/v1/
Формат данных
API принимает и отправляет данные в формате JSON. При отправке запроса необходимо указать заголовок:
Content-Type: application/json
Аутентификация
API использует JWT (JSON Web Tokens) для аутентификации. После успешной авторизации вы получаете два токена:
access_token— для авторизации запросов (срок действия: 30 минут)refresh_token— для обновления access_token (срок действия: 7 дней)
Для авторизованных запросов необходимо добавлять заголовок:
Authorization: Bearer {access_token}
Сервис авторизации (User Service)
Регистрация нового пользователя
Эндпоинт: POST /auth/register
Тело запроса:
{
"email": "user@example.com",
"username": "username",
"password": "SecurePassword123!",
"first_name": "Имя",
"last_name": "Фамилия",
"phone": "+79991234567"
}
Ответ при успехе (201 Created):
{
"status": "success",
"message": "User registered successfully",
"data": {
"user_id": "uuid-string",
"username": "username",
"email": "user@example.com"
}
}
Возможные ошибки:
- 400 Bad Request: Некорректные данные
- 409 Conflict: Пользователь с таким email или username уже существует
Авторизация пользователя
Эндпоинт: POST /auth/login
Тело запроса (вариант 1):
{
"username": "username",
"password": "SecurePassword123!"
}
Тело запроса (вариант 2):
{
"email": "user@example.com",
"password": "SecurePassword123!"
}
Ответ при успехе (200 OK):
{
"status": "success",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 1800
}
}
Возможные ошибки:
- 401 Unauthorized: Неверный логин или пароль
- 403 Forbidden: Аккаунт заблокирован
Обновление токена
Эндпоинт: POST /auth/refresh
Тело запроса:
{
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Ответ при успехе (200 OK):
{
"status": "success",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 1800
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный refresh_token
Выход из системы
Эндпоинт: POST /auth/logout
Заголовки:
Authorization: Bearer {access_token}
Ответ при успехе (200 OK):
{
"status": "success",
"message": "Successfully logged out"
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
Получение профиля пользователя
Эндпоинт: GET /users/me
Заголовки:
Authorization: Bearer {access_token}
Ответ при успехе (200 OK):
{
"status": "success",
"data": {
"user_id": "uuid-string",
"username": "username",
"email": "user@example.com",
"first_name": "Имя",
"last_name": "Фамилия",
"phone": "+79991234567",
"created_at": "2025-10-16T10:30:00Z",
"is_verified": true
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
Сервис экстренных оповещений (Emergency Service)
Создание экстренного оповещения
Эндпоинт: POST /emergency/alert
Заголовки:
Authorization: Bearer {access_token}
Тело запроса:
{
"location": {
"latitude": 55.7558,
"longitude": 37.6173
},
"message": "Нуждаюсь в помощи. Преследование.",
"battery_level": 42,
"contact_ids": ["uuid1", "uuid2"]
}
Ответ при успехе (201 Created):
{
"status": "success",
"data": {
"alert_id": "alert-uuid-string",
"created_at": "2025-10-16T15:30:00Z",
"status": "active",
"message": "Экстренное оповещение активировано"
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
- 400 Bad Request: Неверные координаты или другие данные
Получение статуса экстренного оповещения
Эндпоинт: GET /emergency/alert/{alert_id}
Заголовки:
Authorization: Bearer {access_token}
Ответ при успехе (200 OK):
{
"status": "success",
"data": {
"alert_id": "alert-uuid-string",
"created_at": "2025-10-16T15:30:00Z",
"status": "active",
"location": {
"latitude": 55.7558,
"longitude": 37.6173,
"updated_at": "2025-10-16T15:35:00Z"
},
"notified_contacts": [
{
"contact_id": "uuid1",
"status": "notified",
"notified_at": "2025-10-16T15:31:00Z"
},
{
"contact_id": "uuid2",
"status": "pending",
"notified_at": null
}
],
"emergency_services_notified": true,
"emergency_services_notified_at": "2025-10-16T15:32:00Z"
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
- 403 Forbidden: Нет доступа к данному оповещению
- 404 Not Found: Оповещение не найдено
Обновление местоположения при активном оповещении
Эндпоинт: PUT /emergency/alert/{alert_id}/location
Заголовки:
Authorization: Bearer {access_token}
Тело запроса:
{
"latitude": 55.7560,
"longitude": 37.6175,
"accuracy": 10.5,
"battery_level": 38
}
Ответ при успехе (200 OK):
{
"status": "success",
"message": "Location updated successfully",
"data": {
"updated_at": "2025-10-16T15:40:00Z"
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
- 403 Forbidden: Нет доступа к данному оповещению
- 404 Not Found: Оповещение не найдено или не активно
Отмена экстренного оповещения
Эндпоинт: POST /emergency/alert/{alert_id}/cancel
Заголовки:
Authorization: Bearer {access_token}
Тело запроса:
{
"reason": "Ложная тревога",
"details": "Случайно нажала кнопку"
}
Ответ при успехе (200 OK):
{
"status": "success",
"message": "Alert cancelled successfully",
"data": {
"alert_id": "alert-uuid-string",
"cancelled_at": "2025-10-16T15:45:00Z",
"status": "cancelled"
}
}
Возможные ошибки:
- 401 Unauthorized: Недействительный токен
- 403 Forbidden: Нет доступа к данному оповещению
- 404 Not Found: Оповещение не найдено
- 409 Conflict: Оповещение уже отменено
Рекомендации по работе с API
Обработка ошибок
Все ошибки API возвращаются в едином формате:
{
"status": "error",
"code": "ERROR_CODE",
"message": "Описание ошибки",
"details": {
"field": ["Детальное описание ошибки для конкретного поля"]
}
}
Управление токенами
- После получения
access_tokenиrefresh_tokenсохраните их в безопасном хранилище. - Для каждого запроса, требующего авторизацию, добавляйте
access_tokenв заголовок. - Если API возвращает ошибку 401, попробуйте обновить токен через эндпоинт
/auth/refresh. - Если и это не помогает, перенаправьте пользователя на страницу входа.
Оптимизация работы с сетью
- Используйте кэширование для уменьшения количества запросов.
- Реализуйте механизм повторных попыток для нестабильных соединений.
- При отправке экстренных оповещений учитывайте возможную нестабильность сети — сохраняйте данные локально до получения подтверждения от сервера.
Работа с геолокацией
- Запрашивайте у пользователя разрешение на постоянный доступ к геолокации.
- Оптимизируйте частоту обновления координат для экономии батареи.
- При активном экстренном оповещении увеличивайте частоту обновления координат.
Тестирование API
Для облегчения интеграции с API доступна песочница:
https://api-sandbox.womensafety.app/api/v1/
Тестовые учетные записи:
- Пользователь:
test_user/Test123! - Администратор:
test_admin/Admin123!
Работа с реальными устройствами
Для корректной работы с API на реальных устройствах учитывайте:
- Ограничения режима энергосбережения на некоторых устройствах.
- Различную точность GPS на разных моделях телефонов.
- Возможность потери соединения в некоторых зонах.
Реализуйте механизм, который будет накапливать данные локально при отсутствии сети и отправлять их, когда соединение восстановится.
Безопасность
- Никогда не храните пароли в открытом виде.
- Не сохраняйте токены в незащищенном хранилище.
- Всегда проверяйте SSL-сертификаты при подключении к API.
- Реализуйте защиту от подбора пароля, ограничивая количество попыток входа.
Поддержка
При возникновении проблем с интеграцией можно обратиться:
- Email: api-support@womensafety.app
- Документация: https://docs.womensafety.app
- Статус сервисов: https://status.womensafety.app