Как настроить REST API на 1С-Битрикс: Управление сайтом?

Нужно отдать каталог сайта мобильному приложению или внешнему сервису, а в админке нет кнопки "Создать вебхук"? На 1С-Битрикс: Управление сайтом REST включается вручную: модуль rest, страница /local/rest/, два правила в urlrewrite и галочка у инфоблока. После настройки вы получите рабочий URL вида /rest/1/ключ/iblock.Element.get и JSON с элементами - без путаницы с облачным CRM, который часто встречается в поиске по запросу "битрикс rest api".

REST на коробочной CMS - это способ дать внешней программе читать данные сайта по HTTPS без входа в админку. На БУС нет встроенного раздела для вебхуков: вы сами создаете страницу с компонентом bitrix:rest.hook, прописываете urlrewrite и включаете доступ у инфоблока. Тестовый вызов iblock.Element.get с iblockId и elementId должен вернуть JSON, а не METHOD_NOT_FOUND.

На практике типичная ошибка — открыть apidocs.bitrix24.ru и потратить час на методы crm.*, которые на вашем сайте не работают: главная проблема запроса «битрикс rest api» — путаница с облачным CRM. В реальном проекте с Flutter-каталогом разработчик видит ERROR_METHOD_NOT_FOUND, пока не добавит два правила urlrewrite и не включит «Включен доступ через REST» у инфоблока.

REST API (программный интерфейс по HTTP) на сайте нужен, когда данные должны уходить во внешний мир: мобильное приложение, виджет на другом домене, скрипт обмена. На коробочном "Управление сайтом" это не тот же продукт, что портальный REST облачного CRM: методы crm.* там не заработают на вашем каталоге.

Ниже - один связный сценарий от проверки модуля до тестового запроса к инфоблоку. Если инфоблока еще нет, сначала создайте его по инструкции по инфоблокам; для обмена с 1С смотрите обзор интеграции с 1С - REST там один из вариантов, не единственный.

Определите, когда нужен REST на CMS

Сравнение REST на CMS и облачном CRM Bitrix24

Берите модульный REST, если внешней системе нужен стабильный URL и JSON без разработки своего контроллера с нуля. Типичные задачи: каталог для Flutter-приложения, выгрузка новостей на лендинг, точечная синхронизация остатков.

Делайте: уточняйте в ТЗ продукт - "1С-Битрикс: Управление сайтом" на вашем домене, а не облачный портал. Не делайте: не копируйте примеры с apidocs.bitrix24.ru - они про CRM и не откроют ваш инфоблок.

Проверьте модуль rest и подготовьте окружение

Чеклист подготовки REST: модуль, SSL, пользователь, кеш

Модуль REST API для "Управление сайтом" доступен с версии продукта 16.6.0. Проверьте: Настройки - Настройки продукта - Модули - найдите "rest" и убедитесь, что он установлен.

  1. Убедитесь, что сайт открывается по HTTPS - без SSL вебхуки и apauth работать не будут.
  2. Создайте отдельного пользователя с минимальными правами (только то, что нужно API), не администратора.
  3. Проверьте версию модуля iblock: REST для инфоблоков появился с iblock 20.5.0; штатные методы read-only.
  4. Очистите кеш после правок urlrewrite - иначе правила не подхватятся.
  5. Для отладки включите вывод ошибок в settings.php на тестовом стенде, не на боевом.

Делайте: ведите чек-лист "модуль - SSL - пользователь - кеш". Не делайте: не выдавайте вебхук от учетной записи с полным доступом к админке.

Создайте страницу вебхуков в /local/rest/

Схема настройки страницы вебхуков /local/rest/ и urlrewrite

На БУС нет раздела "Разработчикам" как в облаке. Интерфейс входящего вебхука собирают вручную - страницей с компонентом bitrix:rest.hook.

Создайте файл /local/rest/index.php:

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("REST API");
$APPLICATION->IncludeComponent(
    "bitrix:rest.hook",
    "",
    [
        "SEF_MODE" => "Y",
        "SEF_FOLDER" => "/local/rest/",
        "SEF_URL_TEMPLATES" => [
            "list" => "",
            "event" => "event/",
        ],
    ]
);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");

После сохранения откройте https://ваш-сайт.ru/local/rest/ под пользователем с правом на REST. Там создаете входящий вебхук и выбираете scope (права), например iblock.

Делайте: храните страницу в /local/, чтобы обновления ядра ее не затерли. Не делайте: не публикуйте ссылку на /local/rest/ в открытом доступе без авторизации в админке.

Настройте urlrewrite: два обязательных правила

Без двух правил вызовы /rest/... часто дают 404 или METHOD_NOT_FOUND. Схема прохождения запроса:

Цепочка вызова:
Клиент (curl, Postman, приложение) → HTTPS /rest/{user}/{code}/{method} → urlrewrite #^/rest/# → /bitrix/services/rest/index.php → модуль rest → метод iblock.Element.get → JSON-ответ

Добавьте в /urlrewrite.php (или через интерфейс "Управление адресами") два правила:

// Правило 1: страница управления вебхуками
[
    "CONDITION" => "#^/local/rest/#",
    "RULE" => "",
    "ID" => "bitrix:rest.hook",
    "PATH" => "/local/rest/index.php",
],
// Правило 2: обработчик API-вызовов
[
    "CONDITION" => "#^/rest/#",
    "RULE" => "",
    "ID" => "",
    "PATH" => "/bitrix/services/rest/index.php",
],

Делайте: проверяйте оба URL - и /local/rest/, и тестовый /rest/1/xxx/profile. Не делайте: не ограничивайтесь одним правилом "на все REST" - UI и API разведены.

Выпустите входящий вебхук и проверьте формат URL

На странице /local/rest/ создайте входящий вебхук. Формат вызова:

https://ваш-сайт.ru/rest/{ID_пользователя}/{секретный_код}/{имя_метода}

Пример теста (замените домен, user, code):

curl "https://ваш-сайт.ru/rest/1/xxxxxxxxxx/profile"

Успешный ответ - JSON с данными профиля. Для инфоблока понадобится scope iblock и методы iblock.Element.get или iblock.Element.list.

Делайте: храните код вебхука в секретах, не в git. Не делайте: не светите полный URL с ключом в логах nginx и в тикетах поддержки.

Откройте инфоблок для REST и сделайте тестовый запрос

Штатный REST инфоблоков с версии iblock 20.5.0 - только чтение: iblock.Element.get и iblock.Element.list. Запись через iblock.Element.add из коробки недоступна; для нее нужен обработчик OnRestServiceBuildDescription - см. статью про обработчики событий.

В настройках нужного инфоблока (Контент - Инфоблоки - тип - инфоблок):

  • Заполните поле "Символьный код API" (API_CODE) латиницей, например catalog.
  • Включите галочку "Включен доступ через REST".
  • Запомните числовой ID инфоблока и ID тестового элемента.

Пример GET к одному элементу:

curl "https://ваш-сайт.ru/rest/1/xxxxxxxxxx/iblock.Element.get?iblockId=5&elementId=42"

Для списка используйте iblock.Element.list с filter и select. Если в ответе не хватает полей вроде DETAIL_TEXT, расширяйте контроллер по документации на dev.1c-bitrix.ru - базовый get отдает не все свойства.

Делайте: сначала добейтесь рабочего get на одном элементе. Не делайте: не ожидайте запись в каталог через REST без доработки - это частая ловушка после опыта с облачными списками.

Выберите: модульный REST или собственные маршруты D7

Критерий Модуль rest + вебхук D7 RoutingConfigurator + /api/v1
Скорость старта Быстро: штатные iblock.* методы Дольше: пишете контроллер и авторизацию
Формат URL /rest/{user}/{code}/method.name Свой, например /api/v1/catalog
Запись в инфоблок Только через OnRestServiceBuildDescription Полный контроль в Engine\Controller
Кому подходит Интегратору, мобилке, чтению каталога Нестандартный контракт, своя авторизация
Итоговый вердикт: для чтения каталога и быстрого MVP берите модульный REST. Если ТЗ требует свой JSON и JWT вместо вебхука - проектируйте /api/v1 на D7, не ломая стандартный /rest/.

Проверьте безопасность и отладьте типичные ошибки

Частые симптомы и что проверить:

  • METHOD_NOT_FOUND - опечатка в имени метода, нет правила #^/rest/#, вебхук без scope iblock.
  • 404 на /rest/ - не добавлено правило urlrewrite или не сброшен кеш.
  • Пустой ответ или access denied - не включен REST у инфоблока, пустой API_CODE, вебхук создан другим пользователем.
  • Ошибка SSL - сайт открыт по http, а клиент требует https.

Ротация ключа: на /local/rest/ удалите старый вебхук, создайте новый, обновите URL у всех клиентов. Права пользователя для API настраивайте по принципу минимума - см. также работу с пользователями в cuser-getlist.

Нужна помощь с настройкой REST под мобильное приложение или обмен - обсудим задачу. Примеры интеграций смотрите в портфолио.

Автор: Максим Мольков, Senior-разработчик 1С-Битрикс.
Источники: документация REST 1С-Битрикс, REST API для инфоблоков, практика внедрений на CMS "Управление сайтом".

Частые вопросы

Чем REST API 1С-Битрикс на сайте отличается от портального REST?

На коробочном "Управление сайтом" вы сами поднимаете страницу /local/rest/ и правила urlrewrite; методы завязаны на ваши инфоблоки и модули сайта. Портальный REST облачного CRM - другой продукт с crm.* и своим интерфейсом вебхуков; его инструкции на каталог интернет-магазина на БУС не переносятся.

Как включить REST API на сайте 1С-Битрикс?

Установите модуль rest, создайте /local/rest/index.php с bitrix:rest.hook, добавьте два правила в urlrewrite для /local/rest/ и /rest/, выпустите входящий вебхук на новой странице. Без HTTPS и сброса кеша шаги часто "не срабатывают" на первом проходе.

Как получить элементы инфоблока через REST?

В инфоблоке укажите символьный код API и включите "Включен доступ через REST". Вызовите iblock.Element.get с iblockId и elementId или iblock.Element.list с filter - URL вида /rest/{user}/{code}/iblock.Element.get. В вебхуке должно быть право iblock.

Где взять вебхук, если нет раздела "Разработчикам"?

Создайте его сами: страница /local/rest/ с компонентом bitrix:rest.hook - это штатный способ на БУС. После авторизации в админке откройте /local/rest/, нажмите создание входящего вебхука и скопируйте URL с секретным кодом.

Можно ли через REST записывать товары в инфоблок?

Штатные методы iblock.Element.get и iblock.Element.list - только чтение. Для записи подключите обработчик OnRestServiceBuildDescription и зарегистрируйте свой метод, либо сделайте отдельный D7-контроллер на /api/v1 с нужной валидацией.

Почему при вызове API приходит METHOD_NOT_FOUND?

Проверьте по порядку: правило #^/rest/# в urlrewrite, точное имя метода (iblock.Element.get, не устаревший алиас), scope вебхука, HTTPS и что модуль rest установлен. Тест profile или app.info покажет, жив ли вебхук вообще.

Обсудить вашу задачу

Было полезно?

Поставьте лайк, если статья помогла разобраться.

Поделиться статьёй

Отправьте тому, кому это пригодится.

Telegram ↗ MAX ↗ ВКонтакте ↗ Одноклассники ↗
Все статьи ↗

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Структура шаблонов сайта в Битриксе и поиск header footer

Как настроить скидки и промокоды на 1С-Битрикс: правила корзины и купоны