Использование объектов интеграции
Документация
Главная

Использование объектов интеграцииBETA

При выполнении пользовательской интеграции код блоков и подключений работает с тремя основными объектами: bundle, context и service. Их правильное использование позволяет настраивать запросы, обрабатывать пагинацию и сохранять состояние между вызовами блока.

Объект bundle

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

bundle.authData

Содержит данные для аутентификации, которые вы настраиваете в разделе Подключения. Все поля подключения становятся доступными через bundle.authData и используются для выполнения запросов к API или другим внешним сервисам.

Пример использования authData:

Заметка

Если вы настроили подключение с полями api_key и api_url, то эти данные будут доступны в bundle.authData и могут быть использованы в вашем блоке для выполнения запросов.

(service, bundle) => {
    var response = service.request({
        url: bundle.authData.api_url + '/data',
        method: 'GET',
        headers: {
            Authorization: 'Bearer ' + bundle.authData.api_key
        }
    });

    if (response.status !== 200) {
        service.stringError('Ошибка запроса: ' + response.status);
    }
    return {
        output: () => ({
            data: response.json
        })
    };
}

bundle.inputData

Содержит данные, введенные пользователем в поля блока. Эти данные используются для настройки параметров запроса или выполнения действий внутри блока.

Пример использования inputData:

Заметка

Если у вас есть блок с полями ввода api_endpoint и access_token, эти данные будут доступны в bundle.inputData и могут быть использованы для настройки вашего запроса.

(service, bundle) => {
    var response = service.request({
        url: bundle.inputData.api_endpoint,
        method: 'GET',
        headers: {
            Authorization: 'Bearer ' + bundle.inputData.access_token
        }
    });
    if (response.status !== 200) {
        service.stringError('Ошибка запроса: ' + response.status);
    }
    return {
        output: () => ({
            data: response.json
        })
    };
}

Объект context

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

Основные применения context:

  • Сохранение состояния между вызовами блока
  • Передача информации между страницами пагинации
  • Хранение данных, которые понадобятся на следующих шагах или в последующих запросах.

Пример использования context в блоке с пагинацией:

var state;
if (context === undefined) {
  state = 1; // Начинаем с первой страницы
} else {
  state = context + 1; // Переходим на следующую страницу
}
var hasNext = state < limit; // Проверяем, есть ли следующая страница

Где:

  • state — текущая страница, которая хранится в контексте
  • hasNext — проверка, которая указывает нужно ли делать еще один запрос для следующей страницы

Объект service

Объект service — это набор вспомогательных методов, которые используются внутри блоков и подключений интеграции. С его помощью выполняются HTTP-запросы к внешним API, обрабатываются ошибки, реализуются OAuth-сценарии и вспомогательные операции с данными.

Методы объекта service доступны в функциях execute, executePagination, redirect, saveFields и других обработчиках интеграции.

НазваниеИспользованиеОписаниеПараметры
base64Encodeservice.base64Encode()Кодирует входную строку в формат Base64Cтрока, которую нужно закодировать
base64Decodeservice.base64Decode()Декодирует строку из формата Base64Строка в формате Base64, которую нужно декодировать
hookПодробне в разделе Использование hook для OAuth-авторизацииОбрабатывает процесс авторизации и ответ от OAuth-ресурса (например, GitLab). Используется для выполнения редиректа, обмена authorization code на access_token и проверки успешной авторизации
requestservice.request({ url, method, headers, jsonBody })Выполняет HTTP-запрос, результатом которого является объект с полем response, содержащий байтовый массив данных от сервиса. Для дальнейшей работы эти данные нужно декодироватьurl (обязательно) — адрес ресурса
method (обязательно) — HTTP-метод (GET, POST, PATCH, PUT, DELETE)
headers (опционально) — HTTP-заголовки
jsonBody/multipartBody — тело запроса (обязательно для POST, PATCH, PUT)
stringErrorservice.stringError("Текст ошибки")Выводит сообщение об ошибке в блоке интеграции.Строка — текст ошибки, который будет отображен пользователю

Использование hook для OAuth-авторизации

Метод hook применяется в подключениях для реализации OAuth-сценариев. Он позволяет:

  • Выполнить редирект пользователя на страницу авторизации
  • Обработать возврат с authorization code
  • Сохранить токены доступа
  • Проверить корректность авторизации

Пример описания хука авторизации:

{
  key: "authorize",
  type: "button",
  label: "Авторизоваться",
  executeWithRedirect: (service, bundle) => {
    return `https://gitlab.com/oauth/authorize?...`;
  },
  executeWithSaveFields: (service, bundle) => {
    /* обмен code → token */
  },
  executeWithMessage: (service, bundle) => {
    /* проверка авторизации */
  }
}

Передача файлов в HTTP-запросах

Интеграции поддерживают загрузку и передачу файлов с использованием параметра multipartBody. Этот механизм применяется для отправки файлов в формате multipart/form-data при выполнении HTTP-запросов.

Пример передачи файла через service.request

Ниже приведен пример отправки файла во внешний API с использованием multipartBody:

var resp = service.request({
    url: 'https://api.example.com/upload',
    method: 'POST',
    headers: {
        Authorization: 'Bearer ' + bundle.authData.api_key,
        'Content-Type': 'multipart/form-data'
    },
    multipartBody: [
        {
            key: 'file',
            fileValue: bundle.inputData.file_content,
            fileName: bundle.inputData.file_name,
            contentType: 'application/octet-stream'
        }
    ]
});
if (resp.status !== 200) {
    service.error.stringError('Ошибка запроса: ' + resp.status);
}

Была ли статья полезна?

Да
Нет
Предыдущая
Выходные поля и их использование
Следующая
Cоздание пользовательской интеграции

Дайджест новостей и обновлений —

один раз в месяц

Заполняя форму, я даю согласие на обработку моих персональных данных
430006, Саранск,
Северо-восточное шоссе, д. 3
ОКВЭД 62.01
ИНН 1328​909857
Код вида деятельности
в области ИТ 15.02 и 17.01
Языки программирования