API для модулей
Обновлено: 07 Декабрь 2025
Версия: 2.2
API для управления модулями
Базовый URL: /modules/api/
Список модулей
GET /modules/api/modules/
Параметры фильтрации:
category: Фильтр по категорииinstalled: Фильтр по статусу установки (true/false)
Установка модуля
POST /modules/api/modules/{id}/install/
Тело запроса (опционально):
{
"version_id": 1
}
Обновление модуля
POST /modules/api/modules/{id}/update-module/
Тело запроса (опционально):
{
"version_id": 2
}
Отключение модуля
POST /modules/api/modules/{id}/disable/
Включение модуля
POST /modules/api/modules/{id}/enable/
Удаление модуля
POST /modules/api/modules/{id}/uninstall/
Тело запроса:
{
"confirm": true,
"rollback_migrations": false
}
API для основных сущностей системы
API предоставляет доступ к основным сущностям системы для авторизованных пользователей внутри системы. Модули могут использовать API для работы с данными, что обеспечивает защиту от изменений в моделях.
Базовый URL
/modules/api/core/
Доступные эндпоинты
Сотрудники (Employees)
GET /modules/api/core/employees/
GET /modules/api/core/employees/{id}/
Параметры фильтрации:
status: Фильтр по статусуorg: Фильтр по подразделению
Пользователи (Users)
GET /modules/api/core/users/
GET /modules/api/core/users/{id}/
Параметры фильтрации:
user_type: Тип пользователяis_active: Активность пользователя
Договоры (Contracts)
GET /modules/api/core/contracts/
GET /modules/api/core/contracts/{id}/
Параметры фильтрации:
status: Статус договораclient: ID клиента
Заявки (Requests)
GET /modules/api/core/requests/
GET /modules/api/core/requests/{id}/
Параметры фильтрации:
status: Статус заявкиexecutor: ID исполнителяclient: ID клиента
Проекты (Projects)
GET /modules/api/core/projects/
GET /modules/api/core/projects/{id}/
Параметры фильтрации:
status: Статус проектаmanager: ID менеджера
Задачи (Tasks)
GET /modules/api/core/tasks/
GET /modules/api/core/tasks/{id}/
Параметры фильтрации:
executor: ID исполнителяproject: ID проектаcompleted: Статус выполнения (true/false)
Уведомления (Notifications)
GET /modules/api/core/notifications/
GET /modules/api/core/notifications/{id}/
POST /modules/api/core/notifications/{id}/mark_read/
POST /modules/api/core/notifications/mark_all_read/
Аутентификация и доступ к API
API модулей доступно для авторизованных пользователей внутри системы.
API модулей предназначено для использования модулями и другими компонентами системы. Оно служит слоем абстракции, который защищает модули от изменений во внутренней структуре моделей.
Доступ к API
API доступно для:
- ✅ Авторизованных пользователей через сессионную аутентификацию Django
- ✅ Модулей - модули могут использовать API через HTTP запросы с сессией пользователя
- ✅ Внутренних системных запросов - с заголовком
X-Internal-Requestили с localhost
API блокирует:
- ❌ Неавторизованные запросы
- ❌ Внешние запросы без сессии Django
Использование API из модулей
Модули могут использовать API для работы с данными основной системы. Это обеспечивает:
- Абстракцию - модули не зависят от внутренней структуры моделей
- Защиту от изменений - при изменении моделей API может оставаться совместимым
- Стандартизированный интерфейс - единый способ работы с данными
Пример использования API из модуля:
import requests
from django.conf import settings
def get_employees_via_api(request):
"""Получение сотрудников через API"""
response = requests.get(
f'{settings.BASE_URL}/modules/api/core/employees/',
cookies=request.COOKIES # Используем сессию текущего пользователя
)
if response.status_code == 200:
return response.json()
return []
Альтернатива - прямые импорты моделей:
from personal.models import Employee
def get_employees_direct():
"""Получение сотрудников напрямую через модели"""
return Employee.objects.filter(status='working')
Рекомендация: Используйте API, если хотите защитить модуль от изменений в моделях. Используйте прямые импорты, если нужны сложные запросы, методы моделей или операции записи (API предоставляет только чтение).
Внешний API
Для внешних интеграций, мобильных приложений и внешних сервисов будет создан отдельный внешний API с соответствующей аутентификацией (токены, API ключи и т.д.).
Примеры использования API
Пример 1: Использование API из модуля
import requests
from django.conf import settings
def get_employees_via_api(request):
"""Получение сотрудников через API из модуля"""
# Используем сессию текущего пользователя
response = requests.get(
f'{settings.BASE_URL}/modules/api/core/employees/',
cookies=request.COOKIES
)
if response.status_code == 200:
return response.json()
return []
Пример 2: Использование API с фильтрацией
import requests
from django.conf import settings
def get_active_employees(request):
"""Получение активных сотрудников через API"""
response = requests.get(
f'{settings.BASE_URL}/modules/api/core/employees/',
params={'status': 'working'}, # Фильтрация
cookies=request.COOKIES
)
if response.status_code == 200:
return response.json()
return []
Пример 3: Альтернатива - прямые импорты моделей
# ✅ ПРАВИЛЬНО - используйте прямые импорты для сложных операций
from personal.models import Employee
from tasks.models import Task
def get_employees_with_tasks():
"""Получение сотрудников с задачами - требует сложный запрос"""
return Employee.objects.filter(
status='working'
).prefetch_related('task_set').annotate(
task_count=Count('task_set')
)
Рекомендация: Используйте API для простого чтения данных, прямые импорты - для сложных операций и записи.