Вызов внешних сервисов по HTTP(s) из потоковых обработчиков#

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

Для того, чтобы осуществлять вызов внешних сервисов по HTTP(s) из потокового обработчика, необходимо:

  1. Внести изменения в файл *.conf.

В шагах трансформации и агрегации предусмотрена возможность обращения к сторонним сервисам по REST-api. Для этого необходимо в описании потока в файле *.conf добавить параметры:

  • restUrls — объект из id, по которому будет происходить обращение к функции:

    • url — адрес внешнего сервиса;

    • type — формат ответа JSON, XML, AVRO. Значение по умолчанию — json;

    • schema — список схем для проверки ответа;

    • checkMimeType — признак проверки MIME type из заголовка ответа Content-Type на соответствие с параметром type. Значение по умолчанию — true.

  • restSslProperties — опциональные настройки ssl; используются в случае, если подключение к сторонним сервисам производится с помощью ssl-соединения (ssl.keystore.location, ssl.keystore.password, ssl.key.password, ssl.truststore.location, ssl.truststore.password, ssl.protocol, ssl.ciphers).

  • type — используемый клиент, может принимать значения apache или default.

  • timeout — тайм-аут в миллисекундах, используемый в Apache клиенте для получения значения вызова, по умолчанию 10000.

Пример конфигурации (файл .conf)

flow: {
  name: "Event Process test"
  source: [${source}]
  restUrls {
     testGet: {
        url: "https://localhost:12345/test"
        type: "xml"
        schema: [
          {
            source: "file"
            path: "/file/path/to/xml/schema"
          },{
            source: "classpath"
            path: "/path/to/default/xml/schema"
            default: true }
        ]
        checkMimeType: true
      }
  }
  restSslProperties {
    "ssl.keystore.location" : "/path/to/jks"
    "ssl.keystore.password" : "pass"
    "ssl.truststore.location" : "/path/to/jks"
    "ssl.truststore.password" : "pass"
    "ssl.key.password" : "pass"
  }
}
  1. Внести изменения в файл *.tr.

Для вызова внешнего сервиса по HTTP(s) в файле *.tr используются функции:

  • getRequest(«url-id», «allow-redirects», «headers») — для отправки GET запросов;

  • postRequest(«url-id», «allow-redirects», «headers», «body») — для отправки POST запросов;

  • deleteRequest(«url-id», «allow-redirects», «headers») — для отправки DELETE запросов;

  • putRequest(«url-id», «allow-redirects», «headers», «body») — для отправки PUT запросов,

где:

  • url-id — alias url из файла конфигурации *.conf (в примере файла конфигурации «testGet»);

  • allow-redirects — параметр REST-запроса, отвечает за перенаправление запроса;

  • headers — параметр REST-запроса, заголовки ключ-значение;

  • body — параметр REST-запроса, тело запроса.

Пример запроса:

curl -X get -H "input-header: test" http://localhost:12345/test

По результатам вызова функции будет сформировано сообщение вида:

{"statusCode":200,"body":"Test response","headers":{"content-length":"13","date":"Mon, dd.MM.yyyy  HH:mm:ss GMT"}}

, где:

  • statusCode — код ответа сервиса;

  • body — тело ответа сервиса;

  • headers - заголовки ответа сервиса.

Пример использования функции в файле .tr:

define result = getRequest("testGet", false, in)
out = $result