Вызов, активация или вкладывание приложений логики с помощью конечных точек HTTPS в Azure Logic Apps
Чтобы приложение логики вызываемое через URL-адрес, могло получать входящие запросы от других служб, можно предоставить синхронную конечную точку HTTPS с помощью триггера на основе запроса в приложении логики. С помощью этой возможности вы можете вызвать приложение логики из других приложений логики и создать шаблон вызываемых конечных точек. Чтобы настроить вызываемую конечную точку для обработки входящих вызовов, можно использовать любой из следующих типов триггеров:
В этой статье показано, как создать вызываемую конечную точку в приложении логики с помощью триггера запроса и вызвать эту конечную точку из другого приложения логики. Все принципы применяются одинаково к другим типам триггеров, которые можно использовать для получения входящих запросов.
Дополнительные сведения о безопасности, авторизации, методах шифрования входящих вызовов приложения логики, таких как протокол TLS, ранее известный как Secure Sockets Layer (SSL), Azure Active Directory Open Authentication (Azure AD OAuth), о предоставлении приложению логики Управления API Azure или ограничении IP-адресов, которые являются источниками входящих вызовов, см. в разделе Безопасный доступ и доступ к данным для входящих вызовов триггеров на основе запросов.
Предварительные требования
Учетная запись и подписка Azure. Если у вас нет ее, вы можете зарегистрироваться для получения бесплатной учетной записи Azure.
Приложение логики, в котором вы хотите использовать триггер для создания вызываемой конечной точки. Можно начать с пустого приложения логики или существующего приложения логики, в котором можно заменить текущий триггер. Этот пример начинается с пустого приложения логики. Если вы не работали с приложениями логики, см. статью Что такое Azure Logic Apps и краткое руководство по созданию приложения логики.
Создание вызываемой конечной точки
Войдите на портал Azure. Создайте и откройте пустое приложение логики в конструкторе приложений логики.
В поле поиска выберите Встроенный. В поле поиска введите request в качестве фильтра. В списке триггеров выберите При получении HTTP-запроса.
При необходимости в поле Схема JSON текста запроса можно ввести схему JSON, описывающую полезные данные или данные, которые должны быть получены триггером.
Конструктор использует эту схему для создания токенов, представляющих выходные данные триггера. Затем вы можете без труда ссылаться на эти выходные данные на всех этапах рабочего процесса приложения логики. Подробнее о токенах, созданных из схем JSON.
В этом примере введите следующую схему:
Можно также создать схему JSON, предоставив пример полезных данных:
В триггере Запрос выберите Использовать пример полезных данных, чтобы создать схему.
В поле Введите или вставьте образец полезных данных JSON введите образец полезных данных, например:
Когда будете готовы, нажмите кнопку Готово.
Теперь в поле Схема JSON текста запроса будет отображаться созданная схема.
Сохраните приложение логики
В поле URL-адрес HTTP POST теперь отображается созданный URL-адрес обратного вызова, который другие службы могут использовать для вызова и активации приложения логики. Этот URL-адрес включает параметры запроса, указывающие ключ подписанного URL-адреса (SAS), который используется для проверки подлинности.
Чтобы скопировать URL-адрес обратного вызова, необходимо выполнить следующие действия:
Справа от поля URL-адрес HTTP POST выберите Копировать URL-адрес (значок копирования файлов).
Совершите этот вызов с помощью метода, который ожидает триггер запроса. В этом примере используется метод POST :
Скопируйте URL-адрес обратного вызова из области обзора приложения логики.
В меню приложения логики выберите Обзор.
В разделе Сводка выберите Просмотреть журнал триггеров.
В разделе URL-адрес обратного вызова [POST] скопируйте URL-адрес:
Выбор ожидаемого метода запроса
По умолчанию триггер запроса ожидает запрос POST . Однако можно указать другой метод, который должен использовать вызывающий объект, но только один метод.
В триггере запроса откройте список Добавить новый параметр и выберите метод, который добавляет это свойство в триггер.
В списке методов выберите метод, который должен ожидать триггер. Или можно указать пользовательский метод.
В этом примере выберите метод GET, чтобы вы могли позже проверить URL-адрес конечной точки.
Передача параметров через URL-адрес конечной точки
Если вы хотите принимать значения параметров через URL-адрес конечной точки, у вас есть следующие варианты:
Эти значения передаются в виде пар "имя-значение" в URL-адресе конечной точки. Для этого параметра необходимо использовать метод GET в триггере запроса. В последующем действии значения параметров можно получить в виде выходных данных триггера с помощью функции triggerOutputs() в выражении.
Эти значения передаются через относительный путь в URL-адресе конечной точки. Также необходимо явно выбрать метод, который требуется триггеру. В последующем действии можно получить значения параметров в качестве выходных данных триггера, обратившись к этим выходным данным напрямую.
Принимать значения с помощью параметров GETВ триггере запроса откройте список Добавить новый параметр, добавьте свойство Method в триггер и выберите метод GET.
В триггере запроса добавьте действие, в котором необходимо использовать значение параметра. Для этого примера добавьте действие Ответ.
В триггере запроса выберите Новый шаг>Добавить действие.
В разделе Выберите действие введите фильтр response в поле поиска. В списке действий выберите действие Ответ.
Чтобы создать выражение triggerOutputs() , получающее значение параметра, выполните следующие действия.
Щелкните внутри свойства Body действия "Ответ", чтобы появился список динамического содержимого, и выберите Выражение.
В поле Выражение введите это выражение, замените parameter-name на имя параметра, а затем нажмите кнопку ОК.
В свойстве Body выражение разрешается в маркер triggerOutputs() .
Если вы сохраните приложение логики, выйдите из конструктора и вернетесь к конструктору, маркер отобразит указанное имя параметра, например:
В представлении кода свойство Body отображается в определении действия "Ответ" следующим образом:
Предположим, что необходимо передать значение для параметра с именем postalCode . Свойство Body задает строку Postal Code: с конечным пробелом и соответствующим выражением:
Чтобы протестировать вызываемую конечную точку, скопируйте URL-адрес обратного вызова из триггера запроса и вставьте URL-адрес в другое окно браузера. В URL-адресе добавьте имя параметра и значение после вопросительного знака ( ? ) в URL-адрес в следующем формате и нажмите клавишу Enter.
Браузер возвращает ответ с этим текстом: Postal Code: 123456
Чтобы поместить имя и значение параметра в другую точку URL-адреса, убедитесь, что в & качестве префикса используется амперсанд (), например:
В этом примере показан URL-адрес обратного вызова с примером имени параметра и значения postalCode=123456 в разных позициях в URL-адресе:
Первое расположение: https://prod-07.westus.logic.azure.com:433/workflows//triggers/manual/paths/invoke?postalCode=123456&api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=
Второе расположение: https://prod-07.westus.logic.azure.com:433/workflows//triggers/manual/paths/invoke?api-version=2016-10-01&postalCode=123456&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=
Если вы хотите включить в URI символ hash или решетки ( # ), используйте вместо этого закодированную версию: %25%23
Прием значений по относительному путиВ триггере запроса откройте список Добавить новый параметр и выберите Относительный путь, чтобы добавить это свойство в триггер.
В свойстве Relative path укажите относительный путь для параметра в схеме JSON, который должен принимать URL-адрес, например /address/ .
В триггере запроса добавьте действие, в котором необходимо использовать значение параметра. Для этого примера добавьте действие Ответ.
В триггере запроса выберите Новый шаг>Добавить действие.
В разделе Выберите действие введите фильтр response в поле поиска. В списке действий выберите действие Ответ.
В свойстве Body действия "Ответ" добавьте токен для параметра, который вы указали в относительном пути триггера.
Предположим, вы хотите, чтобы действие ответа вернуло Postal Code: .
В свойстве Body введите Postal Code: с конечным пробелом. Оставьте курсор в поле редактирования, чтобы список динамического содержимого оставался открытым.
В списке динамического содержимого в разделе При получении HTTP-запроса выберите токен postalCode.
Свойство Body теперь включает выбранный параметр:
Сохраните приложение логики
В триггере запроса URL-адрес обратного вызова обновляется и теперь включает относительный путь, например:
Чтобы протестировать вызываемую конечную точку, скопируйте обновленный URL-адрес обратного вызова из триггера запроса, вставьте URL-адрес в другое окно браузера, замените в URL-адресе на 123456 и нажмите клавишу Enter.
Браузер возвращает ответ с этим текстом: Postal Code: 123456
Если вы хотите включить в URI символ hash или решетки ( # ), используйте вместо этого закодированную версию: %25%23
Вызов приложения логики с помощью URL-адреса конечной точки
После создания конечной точки можно запустить приложение логики, отправив запрос HTTPS на полный URL-адрес конечной точки. Приложения логики имеют встроенную поддержку конечных точек прямого доступа.
Токены, созданные из схемы
При указании схемы JSON для триггера запроса в конструкторе приложений логики создаются токены для свойств в этой схеме. Затем эти токены можно использовать для передачи данных через рабочий процесс приложения логики.
Например, если добавить в схему JSON дополнительные свойства, такие как "suite" , то маркеры для этих свойств будут доступны для использования в последующих шагах для приложения логики. Ниже приведена полная схема JSON.
Создание вложенных приложений логики
Вы можете вкладывать рабочие процессы в свое приложение логики путем добавления других приложений логики, которые могут принимать запросы. Чтобы включить эти приложения логики, выполните следующие действия.
На шаге, где вы хотите вызвать другое приложение логики, выберите Новый шаг>Добавить действие.
В разделе Выберите действие выберите Встроенный. В поле поиска введите logic apps в качестве фильтра. В списке действий выберите Выбрать рабочий процесс Logic Apps.
В конструкторе отображаются доступные приложения логики.
Выберите приложение логики для вызова из текущего приложения логики.
Ссылка на содержимое входящего запроса
Если тип содержимого входящего запроса — application/json , можно ссылаться на свойства во входящем запросе. В противном случае содержимое обрабатывается как одна двоичная единица, которую можно передать в другие API-интерфейсы. Чтобы сослаться на это содержимое в рабочем процессе приложения логики, необходимо сначала преобразовать это содержимое.
Например, при передаче содержимого, имеющего тип application/xml , можно использовать @xpath() выражение для выполнения извлечения XPath или использовать @json() выражение для преобразования XML в JSON. Подробнее о работе с поддерживаемыми типами контента см. здесь.
Чтобы получить выходные данные из входящего запроса, можно использовать @triggerOutputs выражение. Предположим, у вас есть выходные данные, как в этом примере:
Чтобы получить доступ к свойству body , вы можете использовать @triggerBody() выражение в качестве сочетания клавиш.
Ответ на запросы
Возможно, вы захотите ответить на определенные запросы, которые запускают логическое приложение, возвращая содержимое вызывающему объекту. Чтобы создать код состояния, заголовок и текст вашего ответа, вы можете использовать действие "Ответ". Это действие может находиться в любом месте приложения логики, а не только в конце рабочего процесса. Если ваше приложение логики не включает действие "Ответ", конечная точка немедленно отвечает состоянием 202 — Принято.
Чтобы исходный вызывающий объект успешно получил ответ, все необходимые действия для ответа должны завершиться в пределах времени ожидания запроса, если только активируемое приложение логики не вызвано как вложенное приложение логики. Если в течение этого времени ответ не получен, срок действия входящего запроса истечет и будет получен ответ 408 время ожидания клиента истекло.
Для вложенных приложений логики родительское приложение логики будет ожидать ответа до тех пор, пока не будут выполнены все шаги, вне зависимости от того, сколько времени на это потребуется.
Создание ответаВ текст ответа можно включить несколько заголовков и любого типа содержимого. Например, заголовок ответа указывает, что тип содержимого ответа — application/json и что текст содержит значения для свойств town и postalCode , основанные на схеме JSON, описанной ранее в этом разделе для триггера запроса.
У ответов есть следующие свойства:
Свойство (Display) Свойство (JSON) Описание Код состояния statusCode Код состояния HTTPS, используемый в ответе для входящего запроса. Это может быть любой допустимый код состояния, который начинается с 2xx, 4xx или 5xx. Но коды состояния 3xx не допускаются. Заголовки headers Один или несколько заголовков для включения в ответ Текст body Объект body может быть строкой, объектом JSON и даже двоичным содержимым из предыдущего шага.
Чтобы просмотреть определение JSON для действия "Ответ" и полное определение JSON приложения логики, на панели инструментов конструктора приложений логики выберите представление кода.
Вопросы & ответы
Вопрос. Как обеспечивается безопасность URL-адресов?Ответ. При создании URL-адресов обратного вызова Azure обеспечивает безопасность с помощью подписанного URL-адреса (SAS). Подпись передается в качестве параметра запроса и проверяется перед запуском приложения логики. Azure создает эту подпись на основе уникального сочетания секретного ключа для каждого приложения логики, имени триггера и выполняемой операции. Не имея доступа к секретному ключу приложения логики, создать действительную подпись невозможно.
Для производственных систем и систем более высокого уровня безопасности мы настоятельно рекомендуем вызывать приложение логики непосредственно из браузера по следующим причинам:
- ключ общего доступа отображается в URL-адресе;
- невозможно управлять политиками безопасного содержимого из-за общих доменов, используемых клиентами Azure Logic Apps.
Дополнительные сведения о безопасности, авторизации, методах шифрования входящих вызовов приложения логики, таких как протокол TLS, ранее известный как Secure Sockets Layer (SSL), Azure Active Directory Open Authentication (Azure AD OAuth), о предоставлении приложению логики Управления API Azure или ограничении IP-адресов, которые являются источниками входящих вызовов, см. в разделе Безопасный доступ и доступ к данным для входящих вызовов триггеров на основе запросов.
Вопрос. Могу ли я дополнительно настроить конечные точки?Ответ. Да, конечные точки HTTPS поддерживают расширенную конфигурацию через Azure API Management. Эта служба также предлагает вам возможность согласованно управлять всеми своими API, включая приложения логики, настраивать имена домена, использовать дополнительные методы проверки подлинности и т. д. В частности она предоставляет следующие возможности: