Перейти к основному содержанию

REST API

Около 3 мин

REST API

Система предоставляет REST API для автоматизации основных задач - получения и изменения диаграмм, управления элементами архитектуры. API работает по протоколу HTTP с сериализацией JSON.

Ограничения облачной версии

В облачной версии действуют ограничения на использование API по скорости и размеру запросов.


Авторизация

Получение ключа API

Для получения ключа API выполните следующие шаги:

  1. Перейдите в раздел "Команда"
  2. Откройте вкладку "Настройки команды"
  3. Нажмите "Сгенерировать ключ"

Генерация API ключа

Использование ключа

ПараметрЗначениеОписание
ЗаголовокX-Api-KeyДобавляйте ко всем API запросам
ПраваАдминистратор командыДействия выполняются от имени администратора
БезопасностьКонфиденциальноНе передавайте ключ третьим лицам

Ограничения облачной версии

Лимиты по умолчанию

ПараметрЗначениеОписание
Скорость запросов5 запросов/минутуПроверяйте заголовок X-Rate-Limit-Remaining
Размер запроса10 МБМаксимальный размер одного запроса
Диаграмм за запрос20 штукДля методов загрузки диаграмм

Превышение лимитов

При достижении квоты:

{
    "timestamp": "2022-06-28T12:03:03.438+00:00",
    "status": 429,
    "error": "Too Many Requests",
    "message": "You have exhausted your API Request Quota",
    "path": "/public-api/v1/upload-diagrams"
}

Заголовки ответа:

  • X-Rate-Limit-Remaining - оставшиеся запросы
  • X-Rate-Limit-Retry-After-Seconds - время ожидания до следующей попытки

Блокировка аккаунта

При превышении лимита более 3 раз за 24 часа учетная запись будет заблокирована. Обратитесь в поддержку для разблокировки.


Загрузка диаграмм

Основной метод

Путь: POST /public-api/v1/upload-diagrams

Структура запроса

[
    {
        "id": "Meeting Scheduling:1:1123",
        "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>...",
        "name": "Meetings",
        "source": "CamundaMeetingsBackend"
    }
]

Параметры запроса

ПолеТипОбязательноеОписание
idstringВнешний идентификатор процесса
xmlstringXML тело диаграммы (экранированное)
namestringИмя процесса (важно для обновлений)
sourcestringИсточник версии для истории

Структура ответа

{
    "errors": {
        "emptyName": [],
        "emptyDefinition": [],
        "notXml": []
    },
    "createdDiagrams": [],
    "updatedDiagrams": [
        {
            "stormDiagramId": "94d2e63f-f84a-40d4-b4a3-592b0cc7c7d9",
            "sourceDiagramId": "rhsrthsrth"
        }
    ]
}

Важные особенности

  • Максимум 20 диаграмм в одном запросе
  • Поле name критично - не изменяйте в Storm для обновлений
  • Версионность - диаграммы с одинаковым ID обновляются по порядку
  • История версий - можно загружать разные версии в одном запросе

Пример shell-скрипта для Camunda

Автоматизация для Camunda

Используйте этот скрипт для автоматического обновления диаграмм после деплоя:

#!/bin/bash
# Сбор BPMN файлов и отправка в StormBPMN
files=($(ls ./src/main/resources/bpmn/*.bpmn))
size=${#files[@]}
echo '[' > temp.json
counter=1

echo "Начинаем обработку файлов..."
for file in ${files[*]}; do
  id="$(grep -Po '(?<=<bpmn:process\sid=")[^"]+' $file)"
  content="$(cat $file | sed 's/"/\\"/g;')"
  name="$(basename $file .bpmn)"
  echo '{"id":"'$id'","xml":"'$content'", "name": "'$name'", "source": "app"}' >> temp.json

  # Запятые между объектами (не в конце списка)
  if ((counter % 20)) && ((size != counter)) ; then
    echo ',' >> temp.json
  fi

  # Отправка пакета по 20 диаграмм
  if ! ((counter % 20)); then
    echo ']' >> temp.json
    curl -X POST -H "X-Api-Key: API-KEY" -H "Content-Type: application/json" \
         -d @temp.json stormbpmn.com/public-api/v1/upload-diagrams -i
    rm temp.json
    echo '[' > temp.json
  fi

  ((counter=counter+1))

  # Соблюдение лимита скорости
  if ((counter > 100)); then
    sleep 60
  fi
done

# Отправка оставшихся диаграмм
echo ']' >> temp.json
curl -X POST -H "X-Api-Key: API_KEY" -H "Content-Type: application/json" \
     -d @temp.json stormbpmn.com/public-api/v1/upload-diagrams -i
rm temp.json

Управление элементами архитектуры

Загрузка и обновление

Путь: POST /public-api/v1/assets

Структура запроса

[
    {
        "id": null,
        "externalId": null,
        "name": "B2C USER",
        "description": "",
        "externalUrl": null,
        "type": "CLIENT",
        "status": "NEW"
    }
]

Параметры запроса

ПолеТипОбязательноеОписание
idnumber📎ID элемента в системе
externalIdstring📎ID элемента во внешней системе
namestringНазвание элемента
descriptionstring📄HTML описание (unescaped)
externalUrlstring📄Ссылка с плейсхолдерами
typeenum📄Тип элемента архитектуры
statusenum📄Статус элемента

Типы элементов архитектуры

ЗначениеОписание
UNSPECIFIEDНе определено (по умолчанию)
DOCUMENTДокумент
SYSTEMСистема
COMMUNICATIONКоммуникация
CLIENTКлиент
ENTITYСущность
ACTIONДействие
OTHERПрочее

Статусы элементов

ЗначениеОписание
NEWНовый
TRIALТестирование
PRODUCTIONПродакшн
DECOMMISSIONINGВывод из эксплуатации
ARCHIVEАрхив

Логика обновления

УсловиеДействие
Только externalIdОбновление по внешнему ID
Только idОбновление по внутреннему ID
И id, и externalIdОбновление по внутреннему ID
Ни id, ни externalIdСоздание нового элемента

Получение списка диаграмм

Основной метод

Путь: GET /public-api/v1/get-diagram-list

Query-параметры

ПараметрТипОбязательныйОписание
pagenumberНомер страницы (с 0)

Структура ответа

{
    "totalElements": 223,
    "page": 0,
    "size": 20,
    "returnDiagrams": [
        {
            "id": "6b547a8f-a78f-4375-b39e-59c4afd9388e",
            "name": "Draft",
            "status": "NEW",
            "versionNumber": 3,
            "updatedBy": "kotov@bpmn2.ru",
            "teamName": "Мои кредиты",
            "type": "BCM",
            "public": true,
            "createdOn": "2024-05-02T17:19:41.459888",
            "updatedOn": "2024-05-02T17:28:07.695362"
        }
    ]
}

Права доступа

Список диаграмм зависит от прав администратора команды на диаграммы.


Получение диаграммы по ID

Основной метод

Путь: GET /public-api/v1/get-diagram-by-id

Query-параметры

ПараметрТипОбязательныйОписание
diagramIdUUIDУникальный идентификатор диаграммы

Ключевые поля ответа

ПолеТипОписание
idUUIDИдентификатор диаграммы
namestringНазвание диаграммы
bodystringXML содержимое диаграммы
versionNumbernumberНомер версии
statusstringСтатус диаграммы
typestringТип диаграммы

Изменения контракта

Контракт API может измениться. Используйте tolerant reader для получения нужных полей (обычно это поле body).


Обновление описания элемента

Основной метод

Путь: POST /public-api/v1/element-description/{diagramId}/{elementId}

Параметры пути

ПараметрТипОписание
diagramIdUUIDИдентификатор диаграммы
elementIdstringИдентификатор элемента

Структура запроса

{
    "description": "Подробное описание элемента",
    "duration": 3600,
    "externalLink": "https://wiki.company.com/process"
}

Параметры запроса

ПолеТипОписание
descriptionstringHTML описание (экранированное)
durationnumberДлительность в секундах
externalLinkstringВнешняя ссылка

Получение согласований

Основной метод

Путь: GET /public-api/v1/approvals

Query-параметры

ПараметрТипОбязательныйОписание
userEmailstringEmail участника команды
statusenum📄Статус согласования
isApproverboolean📄Признак согласующего

Статусы согласований

ЗначениеОписание
PENDINGОжидает согласования
ACCEPTEDПринято
DECLINEDОтклонено
COMPLETEDЗавершено

Структура ответа

{
    "content": [
        {
            "id": "867bc39c-9145-4eb5-b59f-00545a6a9a3f",
            "approverEmail": "user@company.com",
            "diagramId": "fbeb4c64-e172-4e09-9fa1-6e509a11ffde",
            "diagramName": "Работа с подрядчиком",
            "status": "PENDING",
            "createdOn": "2025-01-23T17:44:27.323817",
            "diagramVersion": "11"
        }
    ],
    "totalElements": 1,
    "totalPages": 1,
    "size": 20,
    "number": 0
}

Лучшие практики

Оптимизация запросов

РекомендацияОписание
Пакетная обработкаОтправляйте до 20 диаграмм за раз
Соблюдение лимитовМониторьте заголовки rate limit
Retry логикаРеализуйте повторные попытки с backoff
ЛогированиеСохраняйте ID запросов для отладки

Безопасность

АспектРекомендация
API ключиХраните в переменных окружения
HTTPSИспользуйте только защищенные соединения
Права доступаОграничивайте права API ключей
РотацияРегулярно обновляйте ключи

Мониторинг

  • Отслеживайте лимиты через заголовки ответов
  • Логируйте ошибки для анализа проблем
  • Мониторьте время ответа API
  • Анализируйте использование квот

Интеграция с CI/CD

Интегрируйте API в пайплайны развертывания для автоматического обновления диаграмм после изменений в коде.


Связанные разделы