Заметки
BX24.js и B24JsSDK: какую библиотеку выбрать для приложения
Короткое сравнение классической BX24.js и новой B24JsSDK для приложений и интеграций Bitrix24.
В документации сейчас встречаются два варианта для JavaScript: классическая
BX24.js и новая B24JsSDK. Коротко: BX24.js
удобна для простого iframe-приложения внутри Bitrix24, а B24JsSDK лучше подходит
для нового кода, TypeScript, Node.js и более сложных интеграций.
Проблема
В примерах Bitrix24 можно встретить разные варианты JavaScript-кода: где-то используется
глобальный объект BX24, где-то — B24Js из пакета
@bitrix24/b24jssdk. Из-за этого не всегда понятно, какую библиотеку брать
для локального приложения.
Для работы с REST API из JavaScript есть два основных подхода:
BX24.js— классическая библиотека для приложений, открытых внутри интерфейса Bitrix24;B24JsSDK— более новая универсальная библиотека для браузера и Node.js.
Обе могут использоваться для вызова REST-методов, но у них разная область применения. Если выбрать библиотеку не под свой сценарий, код получится неудобным или небезопасным.
В старом коде коробочного Битрикса часто встречается объект BX. Это не то же
самое, что BX24.js для REST-приложений.
BX— объект клиентского ядра Битрикса, который часто используют внутри самого портала;BX24— объект JS-библиотеки для приложений Bitrix24 и работы с REST из iframe;B24Js— объект новой библиотеки@bitrix24/b24jssdk.
Для локального приложения, которое открывается во фрейме Bitrix24, обычно речь идёт именно
о выборе между BX24.js и B24JsSDK.
Варианты
Если сильно упростить, BX24.js — привычный вариант для встройки в интерфейс,
а B24JsSDK — более современный SDK для нового кода.
BX24.js
BX24.js подключается обычным скриптом:
<script src="//api.bitrix24.com/api/v1/"></script> Её удобно использовать, когда приложение открывается внутри Bitrix24: на отдельной странице, во вкладке карточки, в слайдере или другом месте встройки.
Что обычно даёт BX24.js:
- быстрый вызов REST через
BX24.callMethod; - готовую авторизацию внутри iframe-приложения;
- методы для работы с интерфейсом Bitrix24;
- управление размером фрейма через
fitWindowиresizeWindow; - простую схему для небольших локальных приложений.
Минус — старый callback-стиль. Для небольших задач это нормально, но в большом приложении код быстро становится менее удобным.
B24JsSDK
B24JsSDK — это пакет @bitrix24/b24jssdk. Его можно подключать
как UMD-скрипт или использовать через сборщик.
<script src="https://unpkg.com/@bitrix24/b24jssdk@latest/dist/umd/index.min.js"></script> Что даёт B24JsSDK:
- работу через
async/await; - варианты для iframe-приложения, OAuth и вебхуков;
- использование в браузере и Node.js;
- более удобную основу для TypeScript и современного frontend-кода;
- логирование и дополнительные обёртки вокруг REST-вызовов.
Для нового приложения я бы сначала смотрел в сторону B24JsSDK, особенно если
планируется сборка, TypeScript, отдельный backend или более сложная интеграция.
Примеры
Главное различие хорошо видно по стилю вызова: у BX24.js обычно callback,
у B24JsSDK — async/await.
Так выглядит простой вызов REST-метода через классическую библиотеку:
BX24.init(function () {
BX24.callMethod(
'user.current',
{},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log(result.data());
}
);
}); Такой вариант хорошо подходит для маленького iframe-приложения без отдельной сложной архитектуры.
Такой же смысл, но через новую библиотеку:
<script src="https://unpkg.com/@bitrix24/b24jssdk@latest/dist/umd/index.min.js"></script>
<script type="module">
try {
const b24 = await B24Js.initializeB24Frame();
const response = await b24.callMethod(
'user.current',
{}
);
console.log(response.getData().result);
} catch (error) {
console.error(error);
}
</script> Код получается ближе к обычному современному JavaScript. Его проще встроить в проект со сборкой, модулями и отдельной обработкой ошибок.
Что выбрать
Выбор зависит не от того, какая библиотека «правильная», а от типа приложения.
Для простого iframe-приложения
Если нужно быстро сделать вкладку, кнопку, виджет или небольшую страницу внутри Bitrix24,
BX24.js всё ещё нормальный вариант.
Я бы брал BX24.js, если:
- приложение открывается только внутри Bitrix24;
- нужно быстро вызвать несколько REST-методов;
- не планируется отдельная сборка frontend-проекта;
- callback-стиль не мешает;
- нужны простые методы для управления фреймом и интерфейсом.
Для нового приложения
Для нового проекта лучше рассмотреть B24JsSDK. Особенно если приложение не
ограничивается одной HTML-страницей.
Я бы смотрел в сторону B24JsSDK, если:
- проект пишется на современном JavaScript или TypeScript;
- нужен
async/awaitвместо callback-цепочек; - есть сборка через Vite, Webpack или другой инструмент;
- часть логики будет работать на Node.js;
- нужна более удобная структура для сложной интеграции.
Для вебхуков
Вебхуки нельзя держать во frontend-коде. Это относится и к статичным приложениям, и к приложениям на новой библиотеке.
Если используется входящий вебхук, его нужно хранить на backend-стороне. Frontend может обращаться к своему серверному обработчику, а уже сервер — к Bitrix24.
// Плохо: вебхук лежит в frontend-коде.
const webhook_url = 'https://example.bitrix24.ru/rest/1/secret/crm.deal.list.json';
// Лучше: frontend обращается к своему backend.
fetch('/local/app/ajax.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
action: 'load_deals',
}),
}); Новая библиотека может работать с вебхуками, но сам вебхук всё равно не должен попадать в JavaScript, который загружается в браузер.