Поделиться через


Справочник по API HTTP

Расширение Durable Functions предоставляет набор встроенных API-интерфейсов HTTP, которые могут выполнять задачи управления на orchestrations, и . Эти API-интерфейсы HTTP — это веб-перехватчики расширяемости, которые узел Azure Functions авторизует, но расширение Durable Functions обрабатывает напрямую.

Прежде чем использовать эти API HTTP, убедитесь, что у вас есть:

Базовый URL-адрес и общие параметры

Все API HTTP используют тот же базовый URL-адрес, что и приложение-функцию. При локальной разработке с помощью Azure Functions Основных инструментов базовый URL-адрес обычно http://localhost:7071. В размещенной службе Azure Functions базовый URL-адрес обычно это https://{appName}.azurewebsites.net. Расширение также поддерживает пользовательские имена узлов, если они настроены в приложении службы приложений.

Для всех API HTTP, реализованных расширением, требуются следующие параметры. Тип данных всех параметров .string

Параметр Тип параметра Описание
taskHub Строка запроса Имя концентратора задач. Если имя концентратора задач не указано, предполагается использование имени концентратора задач текущего функционального приложения.
connection Строка запроса Имя параметра приложения подключения для поставщика серверного хранилища. Если это не указано, предполагается конфигурация подключения по умолчанию для приложения-функции.
systemKey Строка запроса Ключ авторизации, необходимый для вызова API.

Получение значений параметров

Использование привязок клиента оркестрации (рекомендуется): Создайте полные URL-адреса автоматически с помощью API привязки клиента оркестрации :

  • .NET: CreateCheckStatusResponse(), CreateHttpManagementPayload()
  • JavaScript: createCheckStatusResponse(), createHttpManagementPayload()

Создание URL-адреса вручную:

  • taskHub: извлекается из host.json файла:

    • v2.x: extensions.durableTask.hubName
    • v1.x: durableTask.hubName
    • Также можно настроить с помощью параметров приложения с помощью %AppSettingName% синтаксиса
  • connection: имя параметра приложения, содержащего подключение к хранилищу. Извлекается из host.json:

    • v2.x: extensions.durableTask.storageProvider.connectionStringName (по умолчанию используется, AzureWebJobsStorage если не указано)
    • v1.x: durableTask.azureStorageConnectionStringName (по умолчанию используется, AzureWebJobsStorage если не указано)
    • Можно использовать строки подключения или подключения на основе identity (проверка подлинности Microsoft Entra)
  • systemKey: ключ авторизации, зависящий от расширения, для API устойчивых задач. Извлекается на портале Azure:

    1. Открытие приложения-функции
    2. Выбор ключей приложенийфункций в меню слева
    3. В разделе "Системные ключи" найдите ключ (обычно автоматически созданный для расширения)
    4. Копирование значения ключа

    примечание ⚠️Security note: системный ключ предоставляет доступ ко всем Durable Functions API HTTP. Не делитесь им публично или не включайте его в клиентский код.

Каждый API HTTP поддерживает согласованный набор шаблонов запросов и ответов. В следующих разделах содержатся сведения для каждой операции.

Общий рабочий процесс API

Типичный жизненный цикл оркестрации следует следующей последовательности:

  1. Запуск оркестрации → → POST /runtime/webhooks/durabletask/orchestrators/{functionName} Возвращает идентификатор экземпляра и URL-адрес состояния
  2. Проверка хода выполнения → → отслеживания состояния GET /runtime/webhooks/durabletask/instances/{instanceId}
  3. Отправка события (необязательно) → → POST /runtime/webhooks/durabletask/instances/{instanceId}/raiseEvent/{eventName} отправки внешних сигналов
  4. Очистка (необязательно)DELETE /runtime/webhooks/durabletask/instances/{instanceId} → журнал очистки

Примеры операций и запросов и ответов см. в приведенной ниже ссылке.

Запуск оркестрации

Запускает выполнение нового экземпляра указанной функции оркестратора.

запрос

Это важно

Формат URL-адреса отличается версией среды выполнения Функций. Выберите формат, соответствующий вашей среде.

Среда выполнения функций 2.x (рекомендуется):

POST /runtime/webhooks/durabletask/orchestrators/{functionName}/{instanceId?}
     ?taskHub={taskHub}
     &connection={connectionName}
     &code={systemKey}

Среда выполнения функций 1.x (устаревшая версия):

POST /admin/extensions/DurableTaskExtension/orchestrators/{functionName}/{instanceId?}
     ?taskHub={taskHub}
     &connection={connectionName}
     &code={systemKey}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
functionName URL Имя запускаемой функции оркестратора.
instanceId URL Необязательный параметр. Идентификатор экземпляра оркестрации. Если это не указано, функция оркестратора начинается с идентификатора случайного экземпляра.
{content} Запрос содержимого Необязательно. Входные данные функции оркестратора в формате JSON.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): указанная функция оркестратора запланирована на запуск. Заголовок Location ответа содержит URL-адрес для опроса состояния оркестрации.
  • HTTP 400 (недопустимый запрос): указанная функция оркестратора не существует, указанный идентификатор экземпляра недействителен, или содержимое запроса не является допустимым JSON.

Ниже приведен пример запроса, который запускает RestartVMs функцию оркестратора и включает полезные данные объекта JSON:

POST /runtime/webhooks/durabletask/orchestrators/RestartVMs?code=XXX
Content-Type: application/json
Content-Length: 83

{
    "resourceGroup": "myRG",
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}

Полезные данные ответа для случаев HTTP 202 — это объект JSON со следующими полями:

Поле Описание
id Идентификатор экземпляра оркестрации.
statusQueryGetUri URL-адрес состояния экземпляра процесса оркестрации.
sendEventPostUri URL-адрес события "вызов" экземпляра оркестрации.
terminatePostUri URL-адрес экземпляра оркестрации для завершения.
purgeHistoryDeleteUri URL-адрес журнала очистки экземпляра оркестрации.
rewindPostUri (предварительная версия) URL-адрес перемотки экземпляра оркестрации.
suspendPostUri URL ссылки для приостановки экземпляра оркестрации.
resumePostUri URL-адрес "возобновления" экземпляра оркестрации.

Тип данных всех полей .string

Ниже приведен пример полезных данных ответа для экземпляра оркестрации с идентификатором abc123 (отформатированным для удобочитаемости):

{
    "id": "abc123",
    "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
    "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/raiseEvent/{eventName}?code=XXX",
    "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
    "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/terminate?reason={text}&code=XXX",
    "suspendPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/suspend?reason={text}&code=XXX",
    "resumePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/resume?reason={text}&code=XXX"
}

Http-ответ предназначен для совместимости с шаблоном потребителей опроса. Он также включает следующие важные заголовки ответов:

  • Расположение: URL-адрес конечной точки состояния, которая содержит то же значение, что statusQueryGetUri и поле.
  • Повторная попытка: количество секунд, ожидающих между операциями опроса. Значение по умолчанию — 10.

Дополнительные сведения о шаблоне асинхронного опроса HTTP см. в документации по отслеживанию асинхронных операций HTTP .

Получение состояния экземпляра

Возвращает состояние указанного экземпляра оркестрации. Используйте это для отслеживания хода выполнения оркестрации и получения результатов.

запрос

Среда выполнения функций 2.x (рекомендуется):

GET /runtime/webhooks/durabletask/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &showHistory=[true|false]
    &showHistoryOutput=[true|false]
    &showInput=[true|false]
    &returnInternalServerErrorOnFailure=[true|false]

Среда выполнения функций 1.x (устаревшая версия):

GET /admin/extensions/DurableTaskExtension/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &showHistory=[true|false]
    &showHistoryOutput=[true|false]
    &showInput=[true|false]
    &returnInternalServerErrorOnFailure=[true|false]

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
showInput Строка запроса Необязательный параметр. Если задано значение false, входные данные функции не включаются в полезные данные ответа.
showHistory Строка запроса Необязательный параметр. Если задано значение true, журнал выполнения оркестрации включается в полезные данные ответа.
showHistoryOutput Строка запроса Необязательный параметр. Если задано значение true, выходные данные функции включаются в журнал выполнения оркестрации.
createdTimeFrom Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых экземпляров, созданных в указанный момент времени или после заданной временной метки ISO8601.
createdTimeTo Строка запроса Необязательный параметр. При указании фильтрует список возвращенных экземпляров, созданных в заданной ISO8601 метки времени или до нее.
runtimeStatus Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых экземпляров на основе их состояния среды выполнения. Список возможных значений состояния среды выполнения см. в статье "Запросы экземпляров ".
returnInternalServerErrorOnFailure Строка запроса Необязательный параметр. Если задано значение true, этот API возвращает ответ HTTP 500 вместо 200, если экземпляр находится в состоянии сбоя. Этот параметр предназначен для сценариев автоматического опроса состояния.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 200 (ОК): указанный экземпляр находится в завершенном или неудачном состоянии.
  • HTTP 202 (Принято): указанный экземпляр находится в процессе выполнения.
  • HTTP 400 (неверный запрос): указанный экземпляр завершился сбоем или был остановлен.
  • HTTP 404 (не найдено) — указанный экземпляр не существует или не запущен.
  • HTTP 500 (внутренняя ошибка сервера): возвращается только при условии, что returnInternalServerErrorOnFailure установлено в true, и указанный экземпляр завершился с необработанным исключением.

Полезные данные ответа для случаев HTTP 200 и HTTP 202 — это объект JSON со следующими полями:

Поле Тип данных Описание
runtimeStatus струна Состояние среды выполнения экземпляра. К значениям относятся работает, ожидание, сбой, отмена, прекращено, завершено, приостановлено.
input JSON Данные JSON, используемые для инициализации экземпляра. Это поле null если параметр строки запроса showInput задан значением false.
customStatus JSON Данные JSON, используемые для настраиваемого статуса оркестрации. null если поле не задано.
output JSON Выходные данные JSON экземпляра. Это поле null, если экземпляр не находится в состоянии завершения.
createdTime струна Время создания экземпляра. Использует расширенную нотацию ISO 8601.
lastUpdatedTime струна Время последнего сохранения экземпляра. Использует расширенную нотацию ISO 8601.
historyEvents JSON Массив JSON, содержащий журнал выполнения оркестрации. Это поле null, кроме случая, если параметр строки запроса showHistory задан значением true.

Ниже приведен пример ответного содержимого, включающего историю выполнения оркестрации и результаты выполнения действий (отформатированные для удобства чтения).

{
  "createdTime": "2018-02-28T05:18:49Z",
  "historyEvents": [
      {
          "EventType": "ExecutionStarted",
          "FunctionName": "E1_HelloSequence",
          "Timestamp": "2018-02-28T05:18:49.3452372Z"
      },
      {
          "EventType": "TaskCompleted",
          "FunctionName": "E1_SayHello",
          "Result": "Hello Tokyo!",
          "ScheduledTime": "2018-02-28T05:18:51.3939873Z",
          "Timestamp": "2018-02-28T05:18:52.2895622Z"
      },
      {
          "EventType": "TaskCompleted",
          "FunctionName": "E1_SayHello",
          "Result": "Hello Seattle!",
          "ScheduledTime": "2018-02-28T05:18:52.8755705Z",
          "Timestamp": "2018-02-28T05:18:53.1765771Z"
      },
      {
          "EventType": "TaskCompleted",
          "FunctionName": "E1_SayHello",
          "Result": "Hello London!",
          "ScheduledTime": "2018-02-28T05:18:53.5170791Z",
          "Timestamp": "2018-02-28T05:18:53.891081Z"
      },
      {
          "EventType": "ExecutionCompleted",
          "OrchestrationStatus": "Completed",
          "Result": [
              "Hello Tokyo!",
              "Hello Seattle!",
              "Hello London!"
          ],
          "Timestamp": "2018-02-28T05:18:54.3660895Z"
      }
  ],
  "input": null,
  "customStatus": { "nextActions": ["A", "B", "C"], "foo": 2 },
  "lastUpdatedTime": "2018-02-28T05:18:54Z",
  "output": [
      "Hello Tokyo!",
      "Hello Seattle!",
      "Hello London!"
  ],
  "runtimeStatus": "Completed"
}

Ответ HTTP 202 также содержит заголовок ответа location , который ссылается на тот же URL-адрес, что и statusQueryGetUri поле, упомянутое ранее.

Узнать статус всех экземпляров

Запрашивает состояние нескольких экземпляров оркестрации одновременно. Результаты можно фильтровать по состоянию, времени создания и префиксу идентификатора экземпляра. Используйте эту операцию для отслеживания всех активных оркестрации или поиска конкретных экземпляров.

запрос

Среда выполнения функций 2.x (рекомендуется):

GET /runtime/webhooks/durabletask/instances?
    taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}
    &instanceIdPrefix={prefix}
    &showInput=[true|false]
    &top={integer}

Среда выполнения функций 1.x (устаревшая версия):

GET /admin/extensions/DurableTaskExtension/instances
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}
    &instanceIdPrefix={prefix}
    &showInput=[true|false]
    &top={integer}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
showInput Строка запроса Необязательный параметр. Если задано значение false, входные данные функции не включаются в полезные данные ответа.
showHistoryOutput Строка запроса Необязательный параметр. Если задано значение true, включает выходные данные функции в журнал выполнения оркестрации.
createdTimeFrom Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых экземпляров, созданных в указанный момент времени или после заданной временной метки ISO8601.
createdTimeTo Строка запроса Необязательный параметр. При указании фильтрует список возвращенных экземпляров, созданных в заданной ISO8601 метки времени или до нее.
runtimeStatus Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых экземпляров на основе их состояния среды выполнения. Список возможных значений состояния среды выполнения см. в статье "Запросы экземпляров ".
instanceIdPrefix Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых экземпляров, чтобы включить только экземпляры, идентификатор экземпляра которых начинается с указанной строки префикса. Доступно начиная с версии 2.7.2 расширения.
top Строка запроса Необязательный параметр. При указании ограничивается число экземпляров, возвращаемых запросом.

Ответ

Ниже приведен пример полезных данных ответа, включая состояние оркестрации (отформатированный для удобства чтения):

[
    {
        "instanceId": "7af46ff000564c65aafbfe99d07c32a5",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2018-06-04T10:46:39Z",
        "lastUpdatedTime": "2018-06-04T10:46:47Z"
    },
    {
        "instanceId": "80eb7dd5c22f4eeba9f42b062794321e",
        "runtimeStatus": "Running",
        "input": null,
        "customStatus": null,
        "output": null,
        "createdTime": "2018-06-04T15:18:28Z",
        "lastUpdatedTime": "2018-06-04T15:18:38Z"
    },
    {
        "instanceId": "9124518926db408ab8dfe84822aba2b1",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2018-06-04T10:46:54Z",
        "lastUpdatedTime": "2018-06-04T10:47:03Z"
    },
    {
        "instanceId": "d100b90b903c4009ba1a90868331b11b",
        "runtimeStatus": "Pending",
        "input": null,
        "customStatus": null,
        "output": null,
        "createdTime": "2018-06-04T15:18:39Z",
        "lastUpdatedTime": "2018-06-04T15:18:39Z"
    }
]

Замечание

Эта операция может быть дорогой с точки зрения Azure Storage ввода-вывода, если вы используете поставщик Azure Storage и есть много строк в таблице Экземпляров. Дополнительные сведения о таблице экземпляров см. в документации по поставщику Azure Storage.

Если существуют дополнительные результаты, маркер продолжения возвращается в заголовке ответа. Имя заголовка x-ms-continuation-token.

Предостережение

Результат запроса может возвращать меньше элементов, чем ограничение, указанное в параметре top. При получении результатов всегда следует проверить наличие маркера продолжения.

Если задать значение маркера продолжения в следующем заголовке запроса, можно получить следующую страницу результатов. Имя заголовка запроса также x-ms-continuation-token.

Очистка истории отдельного экземпляра

Удаляет лог и связанные данные для указанного экземпляра оркестрации. Эта операция освобождает ресурсы хранилища и не может быть отменена.

запрос

Среда выполнения функций 2.x (рекомендуется):

DELETE /runtime/webhooks/durabletask/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connection}
    &code={systemKey}

Среда выполнения функций 1.x (устаревшая версия):

DELETE /admin/extensions/DurableTaskExtension/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connection}
    &code={systemKey}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.

Ответ

Можно вернуть следующие значения кода состояния HTTP.

  • HTTP 200 (ОК): журнал экземпляров был успешно удален.
  • HTTP 404 (не найдено): указанный экземпляр не существует.

Полезные данные ответа для случая HTTP 200 представляют собой объект JSON со следующим полем:

Поле Тип данных Описание
instancesDeleted целое число Число удаленных экземпляров. Для случая с одним экземпляром это значение всегда должно быть 1.

Ниже приведен пример полезной нагрузки ответа (отформатированной для удобства чтения):

{
    "instancesDeleted": 1
}

Очистка историй нескольких экземпляров

Удаляет журнал и артефакты для нескольких экземпляров одновременно, фильтруется по состоянию, времени создания или префиксу идентификатора экземпляра. Используйте это для массового очистки старых экземпляров и управления затратами на хранение.

запрос

Среда выполнения функций 2.x (рекомендуется):

DELETE /runtime/webhooks/durabletask/instances
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}

Среда выполнения функций 1.x (устаревшая версия):

DELETE /admin/extensions/DurableTaskExtension/instances
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
createdTimeFrom Строка запроса Фильтрует список удаленных экземпляров, созданных в заданной ISO8601 метке времени или после нее.
createdTimeTo Строка запроса Необязательный параметр. При указании фильтрует список очищаемых экземпляров, созданных в заданной ISO8601 метке времени или до нее.
runtimeStatus Строка запроса Необязательный параметр. При указании фильтрует список удаленных экземпляров на основе их состояния среды выполнения. Список возможных значений состояния среды выполнения см. в статье "Запросы экземпляров ".

Замечание

Эта операция может быть дорогой с точки зрения Azure Storage ввода-вывода, если вы используете поставщик Azure Storage и есть много строк в таблицах экземпляров или журналов. Дополнительные сведения об этих таблицах см. в разделе Performance и масштабирование в Durable Functions (Azure Functions).

Ответ

Можно вернуть следующие значения кода состояния HTTP.

  • HTTP 200 (ОК): журнал экземпляров был успешно удален.
  • HTTP 404 (Не найдено): экземпляры не найдены, соответствующие выражению фильтра.

Полезные данные ответа для случая HTTP 200 представляют собой объект JSON со следующим полем:

Поле Тип данных Описание
instancesDeleted целое число Число удаленных экземпляров.

Ниже приведен пример полезной нагрузки ответа (отформатированной для удобства чтения):

{
    "instancesDeleted": 250
}

Создание события

Отправляет уведомление о событии в экземпляр оркестрации, который запущен. Оркестрация должна ожидать этого события по имени или WaitForExternalEventwait_for_external_event.

запрос

Среда выполнения функций 2.x (рекомендуется):

POST /runtime/webhooks/durabletask/instances/{instanceId}/raiseEvent/{eventName}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}

Среда выполнения функций 1.x (устаревшая версия):

POST /admin/extensions/DurableTaskExtension/instances/{instanceId}/raiseEvent/{eventName}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
eventName URL Имя события, на которое ожидает целевой экземпляр оркестрации.
{content} Запрос содержимого Данные нагрузки события в формате JSON.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): событие, вызвавшееся, было принято для обработки.
  • HTTP 400 (недопустимый запрос): содержимое запроса не было типом application/json или не было допустимым JSON.
  • HTTP 404 (не найдено) — указанный экземпляр не найден.
  • HTTP 410 (Ушла): указанный экземпляр завершился или завершился сбоем и не может обрабатывать какие-либо возникающие события.

Ниже приведен пример запроса, который отправляет строку "incr" JSON в экземпляр, ожидающий события с именем operation:

POST /admin/extensions/DurableTaskExtension/instances/bcf6fb5067b046fbb021b52ba7deae5a/raiseEvent/operation?taskHub=DurableFunctionsHub&connection=Storage&code=XXX
Content-Type: application/json
Content-Length: 6

"incr"

Ответы для этого API не содержат содержимого.

Завершение экземпляра

Завершает запущенный экземпляр оркестрации.

запрос

Среда выполнения функций 2.x (рекомендуется):

POST /runtime/webhooks/durabletask/instances/{instanceId}/terminate
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &reason={text}

Среда выполнения функций 1.x (устаревшая версия):

POST /admin/extensions/DurableTaskExtension/instances/{instanceId}/terminate
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &reason={text}

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

Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
reason Строка запроса Необязательно. Причина прекращения экземпляра оркестрации.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): запрос завершения был принят для обработки.
  • HTTP 404 (не найдено) — указанный экземпляр не найден.
  • HTTP 410 (Удалён): указанный экземпляр завершён или выполнен с ошибкой.

Ниже приведен пример запроса, который завершает запущенный экземпляр и указывает причину ошибки:

POST /admin/extensions/DurableTaskExtension/instances/bcf6fb5067b046fbb021b52ba7deae5a/terminate?reason=buggy&taskHub=DurableFunctionsHub&connection=Storage&code=XXX

Ответы для этого API не содержат содержимого.

Приостановить экземпляр

Приостанавливает запущенный экземпляр оркестрации, не завершая его. Экземпляр можно возобновить позже с помощью resume операции.

запрос

В среде выполнения функций версии 2.x запрос форматируется следующим образом (для ясности отображаются несколько строк):

POST /runtime/webhooks/durabletask/instances/{instanceId}/suspend
    ?reason={text}
    &taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
reason Строка запроса Необязательно. Причина приостановки экземпляра оркестрации.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): запрос приостановки был принят для обработки. Текст ответа не возвращается.
  • HTTP 404 (не найдено) — указанный экземпляр не найден.
  • HTTP 410 (Ушел): указанный экземпляр завершился, завершился сбой или завершился и не может быть приостановлен.

Проверка: после получения HTTP 202 запросите состояние экземпляра, используя GET /runtime/webhooks/durabletask/instances/{instanceId} для проверки того, runtimeStatus что изменено "Suspended".

Возобновление экземпляра

Возобновляет выполнение ранее приостановленного экземпляра оркестрации.

запрос

В среде выполнения функций версии 2.x запрос форматируется следующим образом (для ясности отображаются несколько строк):

POST /runtime/webhooks/durabletask/instances/{instanceId}/resume
    ?reason={text}
    &taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
reason Строка запроса Необязательно. Причина возобновления экземпляра оркестрации.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): запрос резюме был принят для обработки. Текст ответа не возвращается.
  • HTTP 404 (не найдено) — указанный экземпляр не найден.
  • HTTP 410 (Ушла): указанный экземпляр завершился, завершился сбой или завершился и не может быть возобновлен.

Проверка: после получения HTTP 202 запросите состояние экземпляра, используя GET /runtime/webhooks/durabletask/instances/{instanceId} для проверки того, runtimeStatus что изменено "Running".

Экземпляр перемотки (предварительная версия)

Восстанавливает сбойный экземпляр оркестрации в рабочее состояние путем проигрывания последних неудачных операций. Эта функция позволяет восстановить временные сбои без вмешательства вручную.

запрос

Среда выполнения функций 2.x (рекомендуется):

POST /runtime/webhooks/durabletask/instances/{instanceId}/rewind
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &reason={text}

Среда выполнения функций 1.x (устаревшая версия):

POST /admin/extensions/DurableTaskExtension/instances/{instanceId}/rewind
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &reason={text}

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

Поле Тип параметра Описание
instanceId URL Идентификатор экземпляра оркестрации.
reason Строка запроса Необязательно. Причина перемотки экземпляра оркестрации.

Ответ

Можно вернуть несколько возможных значений кода состояния.

  • HTTP 202 (принято): запрос на перемотку был принят для обработки.
  • HTTP 404 (не найдено) — указанный экземпляр не найден.
  • HTTP 410 (Gone): указанный экземпляр завершился или был завершен.

Ниже приведен пример запроса, который перематывает неудачную инстанцию и указывает причину исправлено.

POST /admin/extensions/DurableTaskExtension/instances/bcf6fb5067b046fbb021b52ba7deae5a/rewind?reason=fixed&taskHub=DurableFunctionsHub&connection=Storage&code=XXX

Ответы для этого API не содержат содержимого.

Сигнальная сущность

Отправляется одностороннее сообщение операции в устойчивую сущность. Если сущность не существует, она создается автоматически. Операции сущностей обрабатываются последовательно и надежно сохраняются.

Замечание

Устойчивые сущности доступны начиная с устойчивых функций 2.0.

запрос

HTTP-запрос отформатирован следующим образом (для ясности отображаются несколько строк):

POST /runtime/webhooks/durabletask/entities/{entityName}/{entityKey}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &op={operationName}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
entityName URL Имя (тип) сущности.
entityKey URL Ключ (уникальный идентификатор) сущности.
op Строка запроса Необязательно. Имя вызываемой пользователем операции.
{content} Запрос содержимого Данные нагрузки события в формате JSON.

Ниже приведен пример запроса, который отправляет определяемое пользователем сообщение "Добавить" в Counter сущность с именем steps. Содержимое сообщения — это значение 5. Если сущность еще не существует, этот запрос создает его:

POST /runtime/webhooks/durabletask/entities/Counter/steps?op=Add
Content-Type: application/json

5

Замечание

По умолчанию с сущностями на основе класса в .NET указание значения < /> удаляет состояние сущности. Если сущность определяет операцию с именем delete, однако вызывается определяемая пользователем операция.

Ответ

Эта операция имеет несколько возможных ответов:

  • HTTP 202 (принято): операция сигнала была принята для асинхронной обработки.
  • HTTP 400 (недопустимый запрос): содержимое запроса не было типом application/json, не было допустимым JSON или имело недопустимое entityKey значение.
  • HTTP 404 (Не найдено): указанный entityName не найден.

Успешный HTTP-запрос не содержит содержимого в ответе. Неудачный HTTP-запрос может содержать сведения об ошибках в формате JSON в содержимом ответа.

Получение сущности

Возвращает состояние указанной сущности.

запрос

HTTP-запрос отформатирован следующим образом (для ясности отображаются несколько строк):

GET /runtime/webhooks/durabletask/entities/{entityName}/{entityKey}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}

Ответ

Эта операция имеет два возможных ответа:

  • HTTP 200 (ОК): указанная сущность существует.
  • HTTP 404 (Не найдено): указанная сущность не найдена.

Успешный ответ содержит сериализованное состояние сущности в формате JSON в качестве своего содержимого.

Пример

Чтобы получить состояние существующей Counter сущности с именем steps:

GET /runtime/webhooks/durabletask/entities/Counter/steps

Counter Если сущность просто содержала несколько шагов, сохраненных в currentValue поле, содержимое ответа может выглядеть следующим образом (отформатировано для удобства чтения):

{
    "currentValue": 5
}

Перечисление сущностей

Можно запросить несколько сущностей по имени сущности или по дате последней операции.

запрос

HTTP-запрос отформатирован следующим образом (для ясности отображаются несколько строк):

GET /runtime/webhooks/durabletask/entities/{entityName}
    ?taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &lastOperationTimeFrom={timestamp}
    &lastOperationTimeTo={timestamp}
    &fetchState=[true|false]
    &top={integer}

Параметры запроса для этого API включают набор по умолчанию, упомянутый ранее, и следующие уникальные параметры:

Поле Тип параметра Описание
entityName URL Необязательно. При указании фильтрует список возвращаемых сущностей по имени сущности (без учета регистра).
fetchState Строка запроса Необязательный параметр. Если задано значение true, состояние сущности включается в полезные данные ответа.
lastOperationTimeFrom Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых сущностей, которые обрабатывали операции после заданной метки времени ISO8601.
lastOperationTimeTo Строка запроса Необязательный параметр. При указании фильтрует список возвращаемых сущностей, которые обрабатывали операции до заданной ISO8601 метки времени.
top Строка запроса Необязательный параметр. При указании ограничивается число сущностей, возвращаемых запросом.

Ответ

Успешный ответ HTTP 200 содержит сериализованный в ФОРМАТЕ JSON массив сущностей и при необходимости состояние каждой сущности.

По умолчанию операция возвращает первые 100 сущностей, которые соответствуют критериям запроса. Вызывающий объект может указать значение параметра строки запроса top, чтобы задать другое максимальное количество возвращаемых результатов. Если дополнительные результаты существуют за пределами возвращаемого значения, маркер продолжения также возвращается в заголовке ответа. Имя заголовка x-ms-continuation-token.

Если задать значение маркера продолжения в следующем заголовке запроса, можно получить следующую страницу результатов. Имя заголовка запроса также x-ms-continuation-token.

Пример: вывод списка всех сущностей

Чтобы перечислить все сущности в центре задач, выполните следующие действия.

GET /runtime/webhooks/durabletask/entities

Ответ JSON может выглядеть следующим образом (отформатировано для удобства чтения):

[
    {
        "entityId": { "key": "cats", "name": "counter" },
        "lastOperationTime": "2019-12-18T21:45:44.6326361Z",
    },
    {
        "entityId": { "key": "dogs", "name": "counter" },
        "lastOperationTime": "2019-12-18T21:46:01.9477382Z"
    },
    {
        "entityId": { "key": "mice", "name": "counter" },
        "lastOperationTime": "2019-12-18T21:46:15.4626159Z"
    },
    {
        "entityId": { "key": "radio", "name": "device" },
        "lastOperationTime": "2019-12-18T21:46:18.2616154Z"
    },
]

Пример. Фильтрация списка сущностей

Чтобы получить список первых двух counter сущностей и получить их состояние:

GET /runtime/webhooks/durabletask/entities/counter?top=2&fetchState=true

Ответ JSON может выглядеть следующим образом (отформатировано для удобства чтения):

[
    {
        "entityId": { "key": "cats", "name": "counter" },
        "lastOperationTime": "2019-12-18T21:45:44.6326361Z",
        "state": { "value": 9 }
    },
    {
        "entityId": { "key": "dogs", "name": "counter" },
        "lastOperationTime": "2019-12-18T21:46:01.9477382Z",
        "state": { "value": 10 }
    }
]

Полный пример рабочего процесса

В этом примере демонстрируется полный жизненный цикл оркестрации с помощью curl команд. Вы также можете использовать Postman, Thunder Client или любой HTTP-клиент.

1. Запуск оркестрации

Запуск новой ProcessOrder оркестрации с входными данными:

curl -X POST "http://localhost:7071/runtime/webhooks/durabletask/orchestrators/ProcessOrder" \
  -H "Content-Type: application/json" \
  -d '{
    "orderId": "ORD-12345",
    "customerId": "CUST-789",
    "amount": 150.00
  }'

Ответ (HTTP 202):

{
  "id": "abc123def456",
  "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456?code=XXX",
  "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456/raiseEvent/{eventName}?code=XXX",
  "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456/terminate?reason={text}&code=XXX"
}

Сохраните идентификатор экземпляра: abc123def456

2. Опрос состояния

Проверка хода выполнения оркестрации:

curl "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456?code=XXX"

Ответ во время выполнения (HTTP 202):

{
  "runtimeStatus": "Running",
  "input": { "orderId": "ORD-12345", "customerId": "CUST-789", "amount": 150.00 },
  "output": null,
  "createdTime": "2026-01-23T10:30:00Z",
  "lastUpdatedTime": "2026-01-23T10:30:05Z"
}

Ответ после завершения (HTTP 200):

{
  "runtimeStatus": "Completed",
  "input": { "orderId": "ORD-12345", "customerId": "CUST-789", "amount": 150.00 },
  "output": { "status": "shipped", "trackingNumber": "TRK-98765" },
  "createdTime": "2026-01-23T10:30:00Z",
  "lastUpdatedTime": "2026-01-23T10:30:15Z"
}

3. Отправка внешнего события (необязательно)

Если оркестрация ожидает утверждения, отправьте событие утверждения:

curl -X POST "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456/raiseEvent/ApprovalReceived?code=XXX" \
  -H "Content-Type: application/json" \
  -d '{ "approved": true, "reviewer": "manager@contoso.com" }'

Ответ: HTTP 202 (принято)

4. Очистка журнала (необязательно)

После завершения оркестрации очистите историю:

curl -X DELETE "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123def456?code=XXX"

Ответ (HTTP 200):

{
  "instancesDeleted": 1
}

Дальнейшие действия