REST API 1С-Битрикс покрывает большинство задач обмена данными между сайтом и внешними системами. Но методов сотни, и без понимания типовых сценариев легко собрать медленную и ненадёжную связку. Разбираем проверенные схемы: заявки, заказы, каталог, цены и статусы — с методами и подводными камнями.
Как устроен REST-обмен в Битриксе
REST в Битриксе — это набор методов, сгруппированных по скоупам: crm, catalog, sale, user и другие. Каждый метод вызывается по HTTP и возвращает JSON. Формат имени говорит сам за себя:
*.add— создать сущность;*.update— изменить;*.get— получить одну запись по ID;*.list— получить список с фильтром и пагинацией;*.delete— удалить.
Ответ list-методов содержит поле next и total — по ним организуют постраничную выборку по 50 записей. Понимание этой азбуки экономит массу времени при проектировании обмена.
Сценарий 1: заявки с сайта в CRM
Самый частый сценарий. Форма на лендинге или внешний сервис создаёт лид или сделку в CRM. Схема простая, но есть нюансы.
- Событие (отправка формы) вызывает входящий вебхук с методом
crm.lead.addилиcrm.deal.add. - В
fieldsпередаются имя, телефон, сумма, источник и UTM-метки. - Множественные поля (телефон, почта) передаются массивом с
VALUEиVALUE_TYPE.
Чтобы не плодить дубли при повторной отправке, перед созданием ищут контакт: crm.duplicate.findbycomm по телефону или почте. Если контакт найден — сделку привязывают к нему.
Сценарий 2: заказы между сайтом и учётной системой
Заказы — двусторонний обмен: с сайта в учётную систему уходит новый заказ, обратно приходят статусы оплаты и отгрузки. В REST заказы живут в скоупе sale.
| Действие | Метод |
|---|---|
| Получить заказы | sale.order.list |
| Создать заказ | sale.order.add |
| Обновить статус | sale.order.update |
| Позиции заказа | sale.basketitem.* |
Ключевой принцип — внешний идентификатор. Храните связь между ID заказа на сайте и в учётной системе, чтобы обратные статусы прилетали в нужный заказ, а не создавали новый. Без этого маппинга двусторонний обмен разваливается.
Сценарий 3: каталог, цены и остатки
Выгрузка каталога через REST оправдана для небольших объёмов и точечных обновлений. Большие каталоги (десятки тысяч SKU) правильнее гнать через CommerceML — REST на таких объёмах упрётся в лимиты.
- Товары —
catalog.product.*, торговые предложения —catalog.product.offer.*. - Цены —
catalog.price.*с привязкой к типу цены (базовая, дилерская). - Остатки —
catalog.storeproduct.*по складам.
Цены и остатки меняются чаще всего, поэтому их синхронизируют инкрементально — только изменённые позиции. Полную выгрузку каталога держат на отдельном, редком расписании.
Batch, идемпотентность и пагинация
Три техники, без которых промышленный REST-обмен не живёт.
- Batch. Метод
batchпозволяет упаковать до 50 команд в один запрос и ссылаться на результат предыдущей через$result. Это резко снижает число обращений и обходит часть rate limit. - Идемпотентность. Повтор запроса не должен создавать дубль. Достигается поиском по внешнему ключу перед
addлибо связкой «найти → обновить или создать». - Пагинация.
list-методы отдают по 50 записей. Для больших выборок используют параметрstartи фильтрацию по ID вместо смещения — так выборка не «плывёт» при вставках.
Пример пагинации по ID: фильтр filter[>ID]=последний_ID с сортировкой по возрастанию быстрее и стабильнее, чем сквозной start на больших таблицах.
REST или CommerceML: как выбрать
Частая ошибка — тянуть весь обмен через REST, включая тяжёлый каталог. Ориентир для выбора инструмента:
| Задача | Инструмент |
|---|---|
| Заявки, лиды, события | REST + вебхуки |
| Заказы и обратные статусы | REST (sale) с внешним ID |
| Небольшой каталог, точечные правки | REST (catalog) |
| Большой каталог, цены, остатки | CommerceML 2 |
| Массовый импорт из файлов | Свой импортёр / Highload |
Часто оптимальна связка: каталог идёт по CommerceML, а события и статусы — по REST. Так каждый инструмент работает в своей зоне эффективности.
Итог
Типовые сценарии REST-обмена сводятся к четырём: заявки в CRM, двусторонние заказы, точечные правки каталога и синхронизация цен с остатками. На каждом держатся три техники — batch, идемпотентность и правильная пагинация по внешнему ключу. А тяжёлый каталог всегда лучше отдать CommerceML.
Мы в B2Bsite проектируем обмен так, чтобы каждый инструмент работал в своей зоне: REST — для событий и заказов, CommerceML и собственный импортёр — для объёмов. В результате связка не упирается в лимиты и не плодит дубли даже под нагрузкой.
Частые вопросы
Сколько записей возвращает list-метод за один запрос?
По умолчанию 50. Для больших выборок используют параметр start для смещения или, что надёжнее, фильтрацию по ID с сортировкой по возрастанию, чтобы выборка не плыла при вставках.
Как избежать дублей при создании сделок и контактов?
Перед add ищите сущность по внешнему ключу или через crm.duplicate.findbycomm по телефону и почте. Если запись найдена — обновляйте её, а не создавайте новую.
Что даёт метод batch?
Он упаковывает до 50 команд в один HTTP-запрос и позволяет ссылаться на результат предыдущей команды. Это снижает число обращений к API и помогает не упереться в rate limit.
Можно ли выгружать весь каталог через REST?
Технически да, но на объёмах в десятки тысяч SKU это упирается в лимиты и медленно. Большие каталоги правильнее передавать через CommerceML, а REST оставить для точечных правок.
Как связать заказ на сайте с заказом в учётной системе?
Через внешний идентификатор: храните соответствие ID на сайте и в 1С. Тогда обратные статусы оплаты и отгрузки прилетают в нужный заказ, а не создают новый.
Нужно ли обновлять заказ целиком при смене статуса?
Нет. Передавайте только изменившееся поле статуса. Обновление целиком рискует затереть правки, сделанные оператором параллельно.
Какие скоупы нужны для обмена заказами и каталогом?
Для заказов — скоуп sale, для товаров, цен и остатков — catalog. Оба доступны в редакциях с модулем интернет-магазина, наличие стоит проверить заранее.
Поможем с настройкой и поддержкой Интеграции и связки систем
Поможем с настройкой, доработкой и поддержкой Интеграции и связки систем.