Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширение Durable Functions предоставляет набор встроенных API-интерфейсов HTTP, которые могут выполнять задачи управления на orchestrations, и . Эти API-интерфейсы HTTP — это веб-перехватчики расширяемости, которые узел Azure Functions авторизует, но расширение Durable Functions обрабатывает напрямую.
Прежде чем использовать эти API HTTP, убедитесь, что у вас есть:
- Базовое понимание концепций модели программирования устойчивых задач (оркестраторы , действия, сущности)
- Проект Durable Functions инициализирован с настроенными привязками
- Доступ к базовому URL-адресу приложения-функции, имени концентратора задач, параметрам подключения и ключу авторизации
Базовый 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%синтаксиса
-
v2.x:
connection: имя параметра приложения, содержащего подключение к хранилищу. Извлекается изhost.json:-
v2.x:
extensions.durableTask.storageProvider.connectionStringName(по умолчанию используется,AzureWebJobsStorageесли не указано) -
v1.x:
durableTask.azureStorageConnectionStringName(по умолчанию используется,AzureWebJobsStorageесли не указано) - Можно использовать строки подключения или подключения на основе identity (проверка подлинности Microsoft Entra)
-
v2.x:
systemKey: ключ авторизации, зависящий от расширения, для API устойчивых задач. Извлекается на портале Azure:- Открытие приложения-функции
- Выбор ключей приложений → функций в меню слева
- В разделе "Системные ключи" найдите ключ (обычно автоматически созданный для расширения)
- Копирование значения ключа
примечание ⚠️Security note: системный ключ предоставляет доступ ко всем Durable Functions API HTTP. Не делитесь им публично или не включайте его в клиентский код.
Каждый API HTTP поддерживает согласованный набор шаблонов запросов и ответов. В следующих разделах содержатся сведения для каждой операции.
Общий рабочий процесс API
Типичный жизненный цикл оркестрации следует следующей последовательности:
-
Запуск оркестрации → →
POST /runtime/webhooks/durabletask/orchestrators/{functionName}Возвращает идентификатор экземпляра и URL-адрес состояния -
Проверка хода выполнения → → отслеживания состояния
GET /runtime/webhooks/durabletask/instances/{instanceId} -
Отправка события (необязательно) → →
POST /runtime/webhooks/durabletask/instances/{instanceId}/raiseEvent/{eventName}отправки внешних сигналов -
Очистка (необязательно) →
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
Замечание
По умолчанию с сущностями на основе 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
}