🔌 API документация¶
🎯 Обзор API¶
Система охраны труда предоставляет RESTful API для интеграции с внешними системами и автоматизации процессов. API построен на основе OpenAPI 3.0 спецификации и поддерживает JSON формат данных.
🔗 Базовые URL¶
- Production:
https://api.safety-system.com/api - Staging:
https://staging-api.safety-system.com/api - Development:
http://localhost:8000/api
🔐 Аутентификация¶
JWT токены¶
Все API запросы требуют аутентификации через JWT токены.
Получение токена:
POST /api/auth/login
Content-Type: application/json
{
"username": "your_username",
"password": "your_password"
}
Ответ:
Использование токена:
Время жизни токена¶
- Access token: 15 минут
- Refresh token: 7 дней (если поддерживается)
📋 Общие принципы¶
HTTP методы¶
GET- получение данныхPOST- создание новых ресурсовPUT- полное обновление ресурсаPATCH- частичное обновление ресурсаDELETE- удаление ресурса
Коды ответов¶
200- OK (успешный запрос)201- Created (ресурс создан)400- Bad Request (неверный запрос)401- Unauthorized (не авторизован)403- Forbidden (нет прав доступа)404- Not Found (ресурс не найден)422- Unprocessable Entity (ошибка валидации)500- Internal Server Error (внутренняя ошибка сервера)
Пагинация¶
Для эндпоинтов, возвращающих списки, используется пагинация:
Параметры: - skip (int): количество записей для пропуска (по умолчанию: 0) - limit (int): максимальное количество записей (по умолчанию: 100, максимум: 1000)
Пример:
Ответ:
Фильтрация и поиск¶
Многие эндпоинты поддерживают фильтрацию:
Сортировка¶
Сортировка через параметр sort:
📚 Основные эндпоинты¶
🔐 Аутентификация¶
Вход в систему¶
Получение информации о текущем пользователе¶
Установка пароля (первый вход)¶
👨💼 Административные функции¶
Дашборд администратора¶
Общая статистика¶
Отчеты¶
GET /api/admin/reports/user-activity?days=30
GET /api/admin/reports/document-usage
GET /api/admin/reports/department-stats
Системное администрирование¶
POST /api/admin/cleanup/old-drafts?days_old=30
POST /api/admin/notifications/send-bulk
GET /api/admin/system-info
🏢 Организации¶
Список организаций¶
Создание организации¶
Информация об организации¶
Импорт из ФНС¶
👥 Сотрудники¶
Список сотрудников организации¶
Информация о сотруднике¶
Статистика сотрудников¶
Доступные роли¶
📚 Документы¶
Список документов¶
Загрузка документа¶
POST /api/documents/upload
Content-Type: multipart/form-data
file: [binary]
name: "Название документа"
description: "Описание"
document_type: "instruction"
category: "safety"
is_template: true
Информация о документе¶
Обновление документа¶
Удаление документа¶
Генерация документов СИЗ¶
📝 Формы¶
Список форм¶
Создание формы¶
Информация о форме¶
Обновление формы¶
Генерация заполненного документа¶
Скачивание заполненного документа¶
🛡️ СИЗ (Средства индивидуальной защиты)¶
Должности¶
Типы защиты¶
Наименования СИЗ¶
Нормы выдачи¶
Учет выдачи СИЗ¶
GET /api/ppe/organizations/{organization_id}/ppe-issuance/
POST /api/ppe/organizations/{organization_id}/ppe-issuance/
PUT /api/ppe/organizations/{organization_id}/ppe-issuance/{issuance_id}
DELETE /api/ppe/organizations/{organization_id}/ppe-issuance/{issuance_id}
Учет обеспеченности СИЗ¶
GET /api/ppe/organizations/{organization_id}/ppe-issue-accounts/
POST /api/ppe/organizations/{organization_id}/ppe-issue-accounts/
PUT /api/ppe/organizations/{organization_id}/ppe-issue-accounts/{account_id}
DELETE /api/ppe/organizations/{organization_id}/ppe-issue-accounts/{account_id}
⚠️ Оценка рисков¶
Создание оценки риска¶
Список оценок рисков¶
Информация об оценке риска¶
Обновление оценки риска¶
Руководящие принципы¶
🏥 Медицинские осмотры¶
Создание медосмотра¶
Список медосмотров¶
Информация о медосмотре¶
Обновление медосмотра¶
📊 Дашборд¶
Данные дашборда¶
Срочные уведомления¶
KPI показатели¶
Данные для графиков¶
События¶
🆘 Поддержка¶
Создание обращения¶
Список обращений¶
Информация об обращении¶
Обновление обращения¶
Добавление сообщения¶
Загрузка вложения¶
📁 Файловое хранилище¶
Загрузка файла¶
Получение файла¶
Дерево директорий¶
Структура директории¶
📝 Примеры использования¶
Создание документа с шаблоном¶
import requests
# Аутентификация
auth_response = requests.post('https://api.safety-system.com/api/auth/login', json={
'username': 'admin',
'password': 'password'
})
token = auth_response.json()['access_token']
headers = {'Authorization': f'Bearer {token}'}
# Загрузка документа
with open('template.xlsx', 'rb') as f:
files = {'file': f}
data = {
'name': 'Инструкция по охране труда',
'description': 'Общая инструкция по безопасности',
'document_type': 'instruction',
'category': 'general_safety',
'is_template': True
}
response = requests.post(
'https://api.safety-system.com/api/documents/upload',
files=files,
data=data,
headers=headers
)
document = response.json()
print(f"Документ создан с ID: {document['id']}")
Создание формы на основе шаблона¶
# Создание формы
form_data = {
'document_id': document['id'],
'form_data': {
'employee_name': 'Иванов И.И.',
'position': 'Инженер',
'department': 'Производство',
'date': '2024-01-15'
},
'status': 'draft'
}
response = requests.post(
'https://api.safety-system.com/api/forms/',
json=form_data,
headers=headers
)
form = response.json()
print(f"Форма создана с ID: {form['id']}")
Генерация заполненного документа¶
# Генерация заполненного документа
response = requests.post(
f'https://api.safety-system.com/api/forms/{form["id"]}/generate-document',
headers=headers
)
result = response.json()
print(f"Документ сгенерирован: {result['filled_document_path']}")
🔒 Безопасность¶
Rate Limiting¶
API имеет ограничения на количество запросов: - Аутентифицированные пользователи: 1000 запросов в час - Неаутентифицированные: 100 запросов в час
Валидация данных¶
Все входные данные проходят валидацию: - Pydantic модели для структурированных данных - Проверка типов и форматов - Санитизация пользовательского ввода
CORS¶
Настроены правила CORS для безопасного взаимодействия с фронтендом: - Разрешенные домены: настраиваются в конфигурации - Методы: GET, POST, PUT, DELETE, OPTIONS - Заголовки: Authorization, Content-Type, X-Requested-With
📊 Мониторинг и логирование¶
Логирование запросов¶
Все API запросы логируются: - Время запроса - IP адрес клиента - Метод и URL - Статус ответа - Время выполнения
Метрики¶
Система собирает метрики: - Количество запросов по эндпоинтам - Время отклика API - Ошибки и исключения - Использование ресурсов
🚀 SDK и библиотеки¶
Python SDK¶
from safety_system_sdk import SafetySystemClient
client = SafetySystemClient(
base_url='https://api.safety-system.com',
username='your_username',
password='your_password'
)
# Создание документа
document = client.documents.create(
name='Test Document',
file_path='./document.xlsx'
)
# Создание формы
form = client.forms.create(
document_id=document.id,
form_data={'field1': 'value1'}
)
JavaScript SDK¶
import { SafetySystemClient } from '@safety-system/sdk';
const client = new SafetySystemClient({
baseUrl: 'https://api.safety-system.com',
username: 'your_username',
password: 'your_password'
});
// Создание документа
const document = await client.documents.create({
name: 'Test Document',
file: fileInput.files[0]
});
// Создание формы
const form = await client.forms.create({
documentId: document.id,
formData: { field1: 'value1' }
});
📖 Дополнительные ресурсы¶
- OpenAPI спецификация:
https://api.vrm-sot.ru/api/docs#/(Swagger UI) - ReDoc документация:
https://api.vrm-sot.ru/api/redoc - Postman коллекция: может быть импортирована напрямую из Swagger UI
В Postman выберите File → Import → Link и укажите ссылку на OpenAPI JSON:
https://api.vrm-sot.ru/api/openapi.json - Примеры кода: в репозитории проекта
API документация обновляется автоматически при изменении кода. Для получения актуальной информации используйте Swagger UI.