Использование объектов интеграции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 и других обработчиках интеграции.
| Название | Использование | Описание | Параметры |
|---|---|---|---|
base64Encode | service.base64Encode() | Кодирует входную строку в формат Base64 | Cтрока, которую нужно закодировать |
base64Decode | service.base64Decode() | Декодирует строку из формата Base64 | Строка в формате Base64, которую нужно декодировать |
hook | Подробне в разделе Использование hook для OAuth-авторизации | Обрабатывает процесс авторизации и ответ от OAuth-ресурса (например, GitLab). Используется для выполнения редиректа, обмена authorization code на access_token и проверки успешной авторизации | — |
request | service.request({ url, method, headers, jsonBody }) | Выполняет HTTP-запрос, результатом которого является объект с полем response, содержащий байтовый массив данных от сервиса. Для дальнейшей работы эти данные нужно декодировать | url (обязательно) — адрес ресурсаmethod (обязательно) — HTTP-метод (GET, POST, PATCH, PUT, DELETE)headers (опционально) — HTTP-заголовкиjsonBody/multipartBody — тело запроса (обязательно для POST, PATCH, PUT) |
stringError | service.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);
}
Была ли статья полезна?