REST API для 1С: как безопасно открыть данные приложению и боту
Задача: данные 1С нужны снаружи
Компания хочет приложение для торговых представителей, бот для клиентов с остатками и статусами заказов, личный кабинет дилера или витрину для партнёров. Все эти проекты упираются в один вопрос: как дать внешнему клиенту данные из 1С, не подставив под удар саму базу.
Чем отличаются OData и HTTP-сервисы как технологии, мы разбирали в статье OData или HTTP-сервисы. Здесь речь о другом: как построить доступ, чтобы он был безопасным и выдерживал нагрузку, когда клиентами становятся сотни телефонов и бот, работающий круглые сутки.
Почему нельзя публиковать 1С напрямую в интернет
Технически опубликовать базу 1С на веб-сервере и открыть доступ из интернета несложно. Именно поэтому так часто делают, и именно поэтому так часто случаются проблемы:
- Учётные данные в приложении. Чтобы ходить в 1С, приложению нужен логин и пароль пользователя 1С. Всё, что зашито в мобильное приложение, можно извлечь.
- Лишние права. Пользователь, под которым ходит приложение, часто видит больше, чем нужно приложению: все цены, всех контрагентов, иногда бухгалтерию.
- Нагрузка. Сотня клиентов, которые раз в минуту обновляют каталог, создают нагрузку, от которой медленнее работают бухгалтер и кладовщик.
- Поверхность атаки. Открытый наружу веб-сервер 1С становится целью для перебора паролей и сканеров уязвимостей.
Правильная схема: три слоя
| Слой | Где находится | Что делает |
|---|---|---|
| HTTP-сервис 1С | Во внутренней сети, рядом с базой | Отдаёт и принимает только нужные данные в JSON |
| Промежуточный сервер (API) | В облаке или DMZ | Авторизация клиентов, лимиты, кэш, журнал запросов |
| Клиенты | Телефоны, бот, сайт | Работают только с промежуточным API |
Приложение не знает ни адреса 1С, ни пароля. Оно авторизуется на промежуточном сервере своим токеном. Промежуточный сервер решает, что этому клиенту можно, и при необходимости обращается к 1С по защищённому каналу. Каталог и остатки отдаются из кэша, а в 1С уходят только запросы, которые без неё не обработать: создание заказа, проверка свежего остатка.
HTTP-сервис в 1С: что в нём должно быть
HTTP-сервис добавляется в конфигурацию через расширение, поэтому типовая остаётся на поддержке. Хороший сервис для внешнего приложения устроен так:
- Узкие методы. Не «отдать справочник целиком», а «каталог для клиента с ценами его типа», «остаток по списку позиций», «создать заказ», «статус заказа».
- Свой пользователь с минимальными правами. Ровно на те объекты, которые нужны методам.
- Проверка входных данных. Любой параметр проверяется: тип, длина, допустимые значения. Заказ с отрицательным количеством не должен дойти до записи.
- Постраничная выдача. Каталог в десятки тысяч позиций отдаётся частями.
- Изменения с момента. Метод «что изменилось с такого-то времени» позволяет обновлять кэш без полной выгрузки.
- Понятные ошибки. Код и текст ошибки, по которым приложение покажет человеку осмысленное сообщение.
Авторизация и права клиентов
На промежуточном сервере каждый клиент получает свой ключ или вход по номеру телефона с кодом. Сервер знает, какому контрагенту или сотруднику в 1С соответствует клиент, и добавляет это ограничение к каждому запросу.
Дилер видит только свои цены и свои заказы. Торговый представитель видит только своих клиентов. Бот для покупателей видит каталог и статус конкретного заказа по номеру и телефону. Ограничение проверяется на сервере, а не в приложении: всё, что проверяется только в приложении, можно обойти.
Кэш и лимиты: чтобы база не падала
- Кэш каталога. Справочник товаров и цены меняются не каждую секунду. Промежуточный сервер обновляет их раз в несколько минут по методу изменений и отдаёт клиентам из памяти.
- Остатки. Для витрины подходит кэш с коротким сроком. При оформлении заказа остаток проверяется в 1С напрямую.
- Лимит запросов. Каждому клиенту задаётся предел числа запросов в минуту. Ошибка в приложении, которое зациклилось на обновлении, не положит базу.
- Очередь записи. Заказы при пиковой нагрузке ставятся в очередь и записываются в 1С последовательно, клиент сразу получает номер и статус «принят».
Журнал и мониторинг
Каждый запрос пишется в журнал: кто, когда, какой метод, сколько длился, чем закончился. Это нужно и для безопасности, и для разбора жалоб: «заказ не дошёл» проверяется за минуту по журналу, а не гаданием.
Мониторинг следит за временем ответа 1С и долей ошибок. Если 1С недоступна, промежуточный сервер продолжает отдавать каталог из кэша, а заказы копит в очереди. Ответственный получает уведомление, например в Telegram.
Пример набора методов для приложения торгового представителя
Чтобы схема была понятнее, вот как выглядит типовой набор методов для приложения, с которым торговые представители принимают заказы у клиентов.
| Метод | Откуда данные | Как часто |
|---|---|---|
| Мои клиенты и их адреса | Кэш промежуточного сервера | Раз в день и по изменениям |
| Каталог с ценами клиента | Кэш, обновление по изменениям | Каждые несколько минут |
| Остаток по позициям заказа | 1С напрямую | Перед отправкой заказа |
| Создать заказ | Очередь, затем 1С | По действию пользователя |
| Статус заказа и отгрузки | 1С через кэш | По запросу |
| Долг клиента | 1С через кэш | При открытии карточки клиента |
Приложение при этом работает офлайн: каталог и клиенты хранятся в телефоне, заказы копятся и отправляются при появлении связи. Для торговых представителей в регионах с нестабильной мобильной связью это обязательное требование, а не опция.
Набор методов для бота или кабинета дилера отличается деталями, но принцип тот же: данные, которые меняются редко, из кэша, проверка в момент действия из 1С, запись через очередь.
Частые ошибки в таких проектах
- Один пользователь 1С на всех клиентов. Нельзя понять, кто что делал, и нельзя ограничить доступ по клиенту.
- Полная выгрузка вместо изменений. Каждое обновление каталога тянет всё заново и нагружает базу.
- Бизнес-логика в приложении. Скидки и проверки остатков считаются в телефоне, и разные версии приложения считают по-разному. Логика должна жить на сервере или в 1С.
- Нет версии API. Изменение метода ломает старые версии приложения, которые ещё стоят у половины пользователей.
Порядок работ
- Описываем сценарии клиентов: что они видят и что делают.
- Проектируем методы API и права.
- Пишем HTTP-сервис в расширении и проверяем на копии базы.
- Поднимаем промежуточный сервер с авторизацией, кэшем и лимитами.
- Готовим документацию API для разработчиков приложения или делаем приложение сами.
- Нагрузочная проверка и запуск.
HTTP-сервисы обычно занимают 2-3 недели, вариант с кэшем и лимитами от 4 недель, стоимость от 350 000 ₸. Подробнее на странице API для 1С. Если нужно и само приложение, смотрите мобильное приложение для 1С.
Частые вопросы
Можно ли подключить мобильное приложение к 1С напрямую?
Технически можно, но небезопасно: пароль от 1С окажется в приложении, а база будет открыта в интернет. Правильно ставить промежуточный сервер.
Что такое HTTP-сервис в 1С?
Механизм платформы 8.3, который позволяет 1С принимать и отдавать данные по HTTP, обычно в JSON. Добавляется расширением без изменения типовой.
Выдержит ли 1С нагрузку от приложения?
Выдержит, если каталог отдаётся из кэша промежуточного сервера, а в 1С уходят только заказы и проверки остатков.
Сколько стоит REST API для 1С?
От 350 000 ₸. HTTP-сервисы 2-3 недели, с кэшем и лимитами от 4 недель.
Нужна ли документация к API?
Да, она входит в работу: разработчики приложения или бота получают описание методов, примеры и коды ошибок.