HTTP API#

Для работы с компонентом Workflow (UIWF) по HTTP используются только POST-запросы. Вся информация, необходимая Workflow Machine, передается в URL запроса. Тело запроса может быть любым (желательно JSON) и обрабатывается в прикладном коде. HTTP-ответ Workflow Machine соответствует универсальному формату.

Все доступные методы приведены в таблице ниже:

URL

Java-аналог

Наличие body

Назначение

/\<gateUrl\>?cmd=START\&name=\<flowName\>

start(String flowName, Serializable input)

Да

Старт нового процесса Workflow начиная с flow — flowName

/\<gateUrl\>?cmd=RESTORE\&name=\<flowName\>

restore(String flowName, Serializable input)

Да

Старт с переходом в произвольное состояние

/\<gateUrl\>?cmd=EVENT\&pid=\<processId\>\&name=\<eventId\>

event(String processId, String eventName, Serializable input)

Да

Вызов события

/\<gateUrl\>?cmd=ROLLBACK\&pid=\<processId\>\&name=\<stepId\>

rollbackHistory(String processId, String stepId)

Нет

Откат истории

/\<gateUrl\>?cmd=EXIT\&pid=\<processId\>

exit(String processId)

Нет

Завершение текущего flow (для subflow это означает возврат в родительский flow)

/\<gateUrl\>?cmd=ABORT\&pid=\<processId\>

abort(String processId)

Нет

Завершение процесса (полное завершение всех flow процесса)

/\<gateUrl\>?cmd=HISTORY\&pid=\<processId\>\&name=\<stepId\>

getHistoryStep(String processId, String stepId)

Нет

Получение информации о шаге истории

/\<gateUrl\>?cmd=AVAILABLE_EVENTS\&pid=\<processId\>

getAvailableEvents(String processId)

Нет

Получение списка доступных событий из текущего состояния

Существуют несколько вариантов ответа на POST-запрос: успешный, неуспешный, сообщение о необходимости перехода или возврата.

Формат успешного ответа Workflow

{
  "success": true,
  "body": {
    "result": "SUCCESS",
    "pid": "<идентификатор процесса>",
    "flow": "<имя текущего flow>",
    "state": "<имя текущего состояния>",
    "output": {
        "<бизнес-специфичный объект с выходными данными>"
    },
    "hints": {
      "boStepCode": "<код шага бизнес операции>",
      "hints": [
        {
          "elementCode": "<код элемента>",
          "hintTexts": [
            {
              "text": "Текст подсказки",
              "hintTextType": "FIELD"
            }
          ]
        }
      ]
    },
    "history": [
      {
        "id": "<идентификатор «хлебной крошки»>",
        "flow": "<имя flow>",
        "flowId": <идентификатор flow>,
        "state": "<имя состояния>",
        "title": "<заголовок «хлебной крошки»>",
        "value": "<значение «хлебной крошки»>",
        "status": "<статус «хлебной крошки»>"
      }
    ]
  },
  "messages": [{
    "title": "<заголовок_сообщения>",
    "text": "<текст_сообщения>",
    "type": "<тип_сообщения>"
  }]
}

Примечания к ответу:

  • шагов истории может быть любое количество, но обязательно присутствует один — текущий;

  • body присутствует только в успешном ответе от Workflow — "success": true;

  • messages могут присутствовать только в успешном ответе от workflow — "success": true.

Формат ошибки в Workflow

{
  "success": false,
  "error": {
    "uuid": "<uuid исключения>",
    "code": "<код ошибки>",
    "system": "<код подсистемы>",
    "title": "<заголовок ошибки>",
    "text": "<текст ошибки>"
  }
}

Процесс завершен

{
  "success": true,
  "body": {
    "pid": "<идентификатор процесса>",
    "result": "END"
  }
}

Формат ответа о необходимости перехода на внешний subflow

{
  "success": true,
  "body": {
    "result": "EXTERNAL_ENTER",
    "pid": "<идентификатор процесса>",
    "url": "<URL для перехода>"
  }
}

Формат ответа о необходимости возврата в родительский flow

{
  "success": true,
  "body": {
    "result": "EXTERNAL_RETURN",
    "pid": "<идентификатор процесса>",
    "url": "<URL для возврата>"
  }
}