Модуль REST в БУСе. Как с ним работать.
В 18 версии БУС появился модуль rest открывающий возможность получать с сайта данные по rest api. Как по мне так rest api в БУС не хватало достаточно сильно, особенно учитывая всевозможные fron-end технологии типа react/vue с серверным рендерингом. Вообще кастомизация некоторых компонентов битрикса это ад адский, к примеру компонент оформления заказа. Поэтому разделение back-end и front-end + серверный рендеринг мне кажется очень удобным и гибким подходом. Да, на back-end можно сделать вывод нужных данных в json и этого уже хватит для большинства задач. Но вот когда надо не просто отдать данные о товарах или новостях, а сделать оформление заказа или отслеживание тех-же заказов, то на реализацию подобного потребуется больше времени нежели простой вывод списка новостей в json.
У меня скоро стартует проект по разработке мобильного приложения и хотелось уже узнать, как работать с rest в БУСе. Лучше ведь делать на том, что есть «в коробке» т.к. хочется верить, что там все продумано с учетом всех особенностей платформы.
В поддержке мне не помогли разобраться с модулем, сказав, что документация в разработке, а принципиально rest бус - это rest b24. Я до этого не работал с b24 api и поэтому не знал, как и что там устроено. Для начала работы с Б24 через rest нужно создать приложение через специальную форму, но вот как создать приложение в БУСе? В админке БУСа нету раздела с приложениями. Я напрямую задал вопрос в поддержку "Как добавить приложение в БУСе (REST) ?" и получил ответ:
Что я и сделал. Разместив компонент, мы увидим точно такую же форму добавления приложения, как и в Б24. Указываем название приложения, ставим галочку «Приложение использует только API», указываем права доступа, указываем ссылку на приложение, жмем «сохранить». Для прав доступа я указал только user т.к. почти все остальное из Б24 и для моих целей не подходит и в списке не хватает многого, например sale (как я выяснил позже доступа к iblock, catalog нету в принцепе). В ответ получаем «Код приложения», «Ключ приложения».
Теперь все как в Б24 за исключением нескольких мелочей. Отправляем запрос на https://<ваш сайт>/oauth/authorize/?client_id=< Код приложения >. Нас кинет на авторизацию, если мы не авторизованы. Потом нас кинет на url, который мы указали при его создании с GET параметрами. Далее получаем токен как в б24. Получив токен, мы можем работать с rest.
Если модуль rest установлен, то уже можно запрашивать url /rest/ к Вашему сайту. В файле /bitrix/modules/rest/services/rest/index.php уже размещен компонент который отвечает за арботу с rest, bitrix:rest.provider с указанием url /rest/ в качестве url для rest. А внутри этого компонента вызывается другой компонент bitrix:rest.server, в котором указано, что он использует класс CRestProvider.
В CRestProvider описаны несколько методов для rest напрмиер methods, который выводит список доступных методов согласно вашему уровню доступа, указанному при создании приложения. Если передать этому методу параметр FULL=true, то получим все возможные методы на данным момент.
Для того чтобы получить список платежных систем я так понимаю служит метод sale.paysystem.list, но при его вызове получаем ошибку sale.paysystem.list. Для получения списка платежных систем нужно иметь доступ к sale и pay_system. Но в списке уровней доступа нету этих пунктов. А раскуривать коды компонента добавить эти уровни чет уже и не хочется, сложно все это. Похоже, что все это абсолютно не пригодно к использованию.
В 18 версии БУС появился модуль rest открывающий возможность получать с сайта данные по rest api. Как по мне так rest api в БУС не хватало достаточно сильно, особенно учитывая всевозможные fron-end технологии типа react/vue с серверным рендерингом. Вообще кастомизация некоторых компонентов битрикса это ад адский, к примеру компонент оформления заказа. Поэтому разделение back-end и front-end + серверный рендеринг мне кажется очень удобным и гибким подходом. Да, на back-end можно сделать вывод нужных данных в json и этого уже хватит для большинства задач. Но вот когда надо не просто отдать данные о товарах или новостях, а сделать оформление заказа или отслеживание тех-же заказов, то на реализацию подобного потребуется больше времени нежели простой вывод списка новостей в json.
У меня скоро стартует проект по разработке мобильного приложения и хотелось уже узнать, как работать с rest в БУСе. Лучше ведь делать на том, что есть «в коробке» т.к. хочется верить, что там все продумано с учетом всех особенностей платформы.
В поддержке мне не помогли разобраться с модулем, сказав, что документация в разработке, а принципиально rest бус - это rest b24. Я до этого не работал с b24 api и поэтому не знал, как и что там устроено. Для начала работы с Б24 через rest нужно создать приложение через специальную форму, но вот как создать приложение в БУСе? В админке БУСа нету раздела с приложениями. Я напрямую задал вопрос в поддержку "Как добавить приложение в БУСе (REST) ?" и получил ответ:
Вы можете разместит компонент bitrix:rest.marketplace.localapp на странице и добавлять приложения в БУСе |
Теперь все как в Б24 за исключением нескольких мелочей. Отправляем запрос на https://<ваш сайт>/oauth/authorize/?client_id=< Код приложения >. Нас кинет на авторизацию, если мы не авторизованы. Потом нас кинет на url, который мы указали при его создании с GET параметрами. Далее получаем токен как в б24. Получив токен, мы можем работать с rest.
Если модуль rest установлен, то уже можно запрашивать url /rest/ к Вашему сайту. В файле /bitrix/modules/rest/services/rest/index.php уже размещен компонент который отвечает за арботу с rest, bitrix:rest.provider с указанием url /rest/ в качестве url для rest. А внутри этого компонента вызывается другой компонент bitrix:rest.server, в котором указано, что он использует класс CRestProvider.
В CRestProvider описаны несколько методов для rest напрмиер methods, который выводит список доступных методов согласно вашему уровню доступа, указанному при создании приложения. Если передать этому методу параметр FULL=true, то получим все возможные методы на данным момент.
Для того чтобы получить список платежных систем я так понимаю служит метод sale.paysystem.list, но при его вызове получаем ошибку sale.paysystem.list. Для получения списка платежных систем нужно иметь доступ к sale и pay_system. Но в списке уровней доступа нету этих пунктов. А раскуривать коды компонента добавить эти уровни чет уже и не хочется, сложно все это. Похоже, что все это абсолютно не пригодно к использованию.