В современной экосистеме автоматизации бизнеса интеграция 1С с внешними сайтами, мобильными приложениями и сторонними сервисами через HTTP-сервисы стала стандартом де-факто. В отличие от тяжеловесных SOAP Web-сервисов, HTTP-сервисы работают быстрее, проще в отладке и используют общепринятые протоколы передачи данных, такие как JSON. Рассмотрим подробно, как создать свой первый сервис, реализовать методы обработки данных и правильно опубликовать его на веб-сервере.
Прежде чем приступать к написанию кода, проанализируем структуру объекта в дереве конфигурации. Создадим новый объект HTTP-сервисы. Основным параметром здесь является Корневой URL. Это уникальное имя, которое будет использоваться в строке адреса (например, orders_exchange). Далее нам необходимо настроить шаблоны URL. Разберем по шагам:
/v1/get_data/{ID}. Здесь часть в фигурных скобках является параметром, который мы сможем прочитать в коде.GET, для передачи и записи — POST.Рассмотрим ситуацию, когда внешняя система запрашивает информацию об остатках товара. В модуле HTTP-сервиса создадим функцию-обработчик. Проанализируем пример кода, который возвращает данные в формате JSON:
Функция ОстаткиТоваровGet_Data(Запрос)
// Получаем параметр из URL
ИдентификаторТовара = Запрос.ПараметрыURL.Получить("ID");
// Формируем структуру ответа
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("ID", ИдентификаторТовара);
ДанныеОтвета.Вставить("Остаток", 150); // Здесь может быть ваш запрос к базе
ДанныеОтвета.Вставить("Статус", "Success");
// Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Формируем HTTP-ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
Возврат Ответ;
КонецФункции
В данном примере мы используем объект HTTPСервисЗапрос для получения входящих параметров и HTTPСервисОтвет для возврата результата. Обратите внимание на важность установки заголовка Content-Type, чтобы вызывающая система понимала, что ей пришел именно JSON.
Теперь разберем более сложную задачу: внешняя система присылает нам заказ покупателя. Нам нужно прочитать тело запроса, десериализовать JSON и создать документ в 1С. Рассмотрим подробнее механизм обработки входящего потока данных.
Функция СоздатьЗаказPost_Order(Запрос)
// Читаем JSON из тела запроса
СтрокаТела = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаТела);
ДанныеЗаказа = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Попробуем создать документ
Попытка
НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйЗаказ.Дата = ТекущаяДата();
НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ДанныеЗаказа.ClientName);
// ... заполнение табличной части ...
НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
// Формируем успешный ответ
Ответ = Новый HTTPСервисОтвет(201); // Created
Ответ.УстановитьТелоИзСтроки("Документ создан успешно", КодировкаТекста.UTF8);
Исключение
// Обработка ошибок
Ответ = Новый HTTPСервисОтвет(500); // Internal Server Error
Ответ.УстановитьТелоИзСтроки("Ошибка при создании: " + ОписаниеОшибки(), КодировкаТекста.UTF8);
КонецПопытки;
Возврат Ответ;
КонецФункции
При работе с POST-запросами крайне важно использовать блок Попытка...Исключение. Если в процессе записи документа возникнет ошибка (например, не заполнено обязательное поле), сервис должен вернуть корректный код состояния (например, 500 или 400), а не просто "упасть", вызывая ошибку веб-сервера.
Для качественного API недостаточно просто возвращать данные. Нужно использовать правильные коды состояний протокола HTTP. Выясним причину популярности определенных кодов:
Чтобы ваш сервис стал доступен "извне", конфигурацию необходимо опубликовать. Разберем этот процесс по шагам:
После этого адрес вашего сервиса будет выглядеть примерно так: http://server_name/base_name/hs/orders_exchange/v1/get_data/123. Обратите внимание, что сегмент /hs/ добавляется платформой автоматически для всех HTTP-сервисов.
Проанализируем вопрос безопасности. По умолчанию доступ к HTTP-сервисам требует авторизации. Мы рекомендуем создать в 1С отдельного пользователя с ограниченными правами, который имеет доступ только к тем объектам метаданных, которые задействованы в сервисе. При вызове сервиса извне необходимо передавать данные авторизации в заголовке Authorization (обычно это Basic Auth, где логин и пароль кодируются в Base64).
Практический совет: Для отладки сервисов используйте специализированные инструменты, такие как Postman или Insomnia. Они позволяют имитировать запросы к 1С, настраивать заголовки и смотреть сырой ответ сервера, что значительно ускоряет поиск ошибок по сравнению с использованием браузера.
При проектировании высоконагруженных сервисов следует помнить, что каждый вызов HTTP-сервиса создает сеанс на сервере 1С (если не используется механизм повторного использования сеансов). Посмотрим, как можно оптимизировать работу:
Запрос к базе данных всегда ограничивайте выборку и используйте индексы.Таким образом, мы разобрали полный цикл создания HTTP-сервиса в среде 1С:Предприятие. Правильное проектирование структуры URL, использование стандартов JSON и корректная обработка кодов состояний позволят вам создавать надежные и быстрые интеграционные решения.