Переменные запросов и ответов

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

При отправке запроса к прокси-серверу API можно передать любую или всю перечисленную ниже информацию в зависимости от конфигурации прокси-сервера API:

  • Заголовки запроса
  • Параметры запроса
  • Данные форм
  • полезные нагрузки XML или JSON;
  • URI ресурсов

По умолчанию все данные в запросе передаются без изменений из ProxyEndpoint в TargetEndpoint. Поэтому, когда TargetEndpoint отправляет запрос на бэкенд-сервер, вся информация из исходного запроса передается в бэкенд-службу.

То же самое относится к ответу, полученному Edge от бэкенд-службы. По умолчанию все данные, полученные в ответе, передаются без изменений в приложение, которое отправило запрос.

Как данные запроса передаются на серверную часть?

На изображении ниже показано определение прокси-сервера API.

Запрос от HTTP-клиента, проходящий через конечную точку прокси-сервера к целевой конечной точке на сервере для доступа к HTTP-сервису. Приведены примеры конечной точки прокси-сервера и целевой конечной точки.

Для этого прокси-сервера API:

  • Виртуальный хост прокси-сервера API: "default"
  • Домен, определенный виртуальным хостом: "http://myOrg-prod.apigee.net"
  • Базовый путь прокси-сервера: "/v1/weather"
  • TargetEndpoint, указанный правилом маршрута: "default"
  • Целевой URL: http://weather.yahooapis.com

Клиентское приложение отправляет запрос GET к прокси-серверу API, используя следующую команду curl:

curl -X GET http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282

Обратите внимание, что этот запрос содержит ресурс forecastrss и один параметр запроса w. Edge анализирует запрос, как показано ниже, и назначает части запроса переменным потока:

{request.verb} {proxy.basepath}/{proxy.pathsuffix}?{request.querystring}

Переменные потока имеют следующие значения:

  • request.verb: "GET"
  • proxy.basepath: "/v1/weather"
  • proxy.pathsuffix: "forecastrss"
  • request.querystring: "w=12797282"

Затем TargetEndpoint отправляет запрос в бэкенд-службу, используя информацию из запроса:

{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}

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

curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282

Как и параметры запроса, все заголовки и параметры формы, которые вы включаете в запрос к прокси-серверу API, передаются на внутренний сервер. Например, вы отправляете запрос, в котором есть заголовок:

curl -X GET -H 'Content-type:application/xml' http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282

Или запрос в форме ниже, чтобы добавить заголовок и данные формы:

curl -X POST -H "Content-type:application/json" -d \
  '{"email" : "janetutorialxml@example.com",
    "firstName" : "Jane",
    "lastName" : "Tutorial",
    "userName" : "jtutorialxml"
  }' \
  http://myOrg-prod.apigee.net/v1/register/user

В обоих примерах заголовки и данные формы передаются в серверную часть без изменений. Заголовки представлены переменными потока, например request.headers.count и request.headers.names. Данные формы представлены переменными потока, например request.formparam.count и request.formparam.names.

Как возвращаются данные ответов?

По умолчанию все данные, полученные Edge от бэкенд-службы в ответе, передаются без изменений приложению, которое отправило запрос. Как описано выше для запроса, данные, возвращаемые в ответе, доступны через переменные потока в Edge. Дополнительную информацию можно найти в справочнике по переменным потока.

Как получить доступ к данным запросов и ответов в прокси-сервере API

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

  • Чтобы удалить информацию о безопасности, используемую Edge для проверки запросов. Эта информация не требуется бэкенд-службе.
  • Чтобы добавить данные, отправляемые в бэкенд-службу, например для отслеживания пользователей или сбора аналитики.
  • Условно обрабатывать запрос на основе данных запроса. Например, у прокси-сервера API может быть несколько целевых конечных точек. Конечная точка TargetEndpoint, используемая запросом, определяется данными запроса. Затем вы удаляете эти данные из запроса перед отправкой в бэкенд-службу.

То же самое относится к данным в ответе. В процессе обработки ответа прокси-сервер API может изменить данные, прежде чем вернуть их приложению, отправившему запрос.

Сообщения с запросами на доступ

Правила позволяют получать доступ к частям запроса и изменять их. К ним относятся:

  • заголовки;
  • Параметры запроса
  • Параметры формы
  • IP-адрес источника
  • Тело сообщения HTTP

В обычном режиме после обработки запроса прокси-сервер отправляет преобразованный запрос целевому сервису.

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

Как получить доступ к ответным сообщениям

Используя переменные, которые относятся к ответному сообщению, правила могут получать доступ к компонентам сообщения, включая заголовок, параметры запроса и формы, исходный IP-адрес, текст HTTP-сообщения и т. д.

Прокси-сервер получает ответное сообщение, а затем применяет к нему ряд правил на основе условий, оцениваемых в ответе, которые могут изменять или преобразовывать ответ.

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

Распространенные правила для доступа к переменным потока

Edge определяет несколько правил, которые можно использовать для обработки данных запросов и ответов. К таким правилам относятся:

  • Правило AssignMessage создает или изменяет сообщения HTTP-запросов или ответов во время выполнения прокси-сервера API. Также создает и заполняет новые переменные потока.
  • Правило ExtractVariables позволяет извлекать контент из сообщений, включая заголовки, пути URI, полезные нагрузки и параметры запроса, для использования в условном операторе. Затем правило применяет текстовый шаблон к контенту письма и при обнаружении совпадения задает указанную переменную.
  • Правило JSONtoXML и правило XMLtoJSON: преобразуют сообщения из формата JavaScript Object Notation (JSON) в формат расширяемого языка разметки (XML) или наоборот.
  • Правило JavaCallout, правило JavaScript, правило PythonScript, правило RegularExpressionProtection. Эти правила позволяют написать скрипт для доступа к переменным потока, содержащим данные запроса и ответа.