Поиск

Релиз

Содержание

Нужна помощь?

Не нашли ответ на свой вопрос? Свяжитесь с нашей службой поддержки.

Обратиться в поддержку

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 для простого чтения данных, прямые импорты - для сложных операций и записи.