Как разработать HTTP-сервис в 1С для передачи данных в формате JSON?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с веб-сайтами часто возникает задача создания механизма, который по внешнему запросу (например, передающему артикул или код производителя) возвращает данные об остатках и ценах в формате JSON. Рассмотрим, как правильно реализовать такой сервис, почему для этой задачи лучше выбрать HTTP-сервис вместо классического Web-сервиса, и как грамотно сформировать ответ.

Выбор технологии: Web-сервис или HTTP-сервис?

Прежде всего, разберем разницу. Web-сервисы в 1С работают по протоколу SOAP. Это строгий стандарт, требующий описания типов данных через XDTO-пакеты и обертывания сообщений в XML-конверты. Хотя SOAP позволяет передавать JSON внутри XML-строки, это избыточно и неудобно для современных веб-разработчиков.

Проанализируем преимущества HTTP-сервисов (REST): они позволяют обмениваться данными напрямую через тело HTTP-запроса в любом формате, включая JSON. Это «легковесный» способ, который проще в отладке и поддерживается любыми веб-технологиями на стороне сайта. Поэтому для нашей задачи мы будем использовать именно HTTP-сервис.

Шаг 1. Создание HTTP-сервиса в метаданных

Рассмотрим процесс создания объекта в конфигураторе. Перейдем в ветку Общие -> HTTP-сервисы и добавим новый объект.

  1. Имя: Например, ИнтеграцияССайтом.
  2. Корневой URL: Укажем api или v1. Это часть пути, по которой сервис будет доступен извне.
  3. Пространство имен: Это уникальная строка, обычно имеющая вид URL, например, http://www.yourcompany.ru/rest.

Далее создадим Шаблон URL. В свойствах шаблона укажем путь, например, /get_stock. Внутри шаблона добавим Метод. Для получения данных обычно используется метод GET.

Шаг 2. Обработка входящих параметров

Выясним, как получить параметры запроса (Код производителя, Артикул и т.д.). В обработчике метода нам доступен объект Запрос типа HTTPСервисЗапрос. Если параметры передаются в строке запроса (например, .../get_stock?article=123), мы извлекаем их следующим образом:


Функция get_stockGet(Запрос)
    
    Артикул = Запрос.ПараметрыURL.Получить("article");
    Производитель = Запрос.ПараметрыURL.Получить("brand");
    
    // Выполняем поиск в базе данных (Запрос к остаткам)
    // ...
    
КонецФункции

Шаг 3. Формирование данных и перевод в JSON

Разберем, как подготовить ответ. Для этого лучше всего использовать объект Структура или Соответствие. Если важно соблюдать регистр ключей (например, сайт требует name с маленькой буквы), используйте Соответствие, так как в Структуре ключи всегда начинаются с заглавной буквы.

Посмотрим на пример формирования данных на основе результатов запроса к базе:


ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("Артикул", Выборка.Артикул);
ДанныеОтвета.Вставить("Наименование", Выборка.Наименование);
ДанныеОтвета.Вставить("Остаток", Выборка.КоличествоОстаток);
ДанныеОтвета.Вставить("ЦенаРозничная", Выборка.Цена);

// Сериализация в JSON строку
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,,, Новый СериализаторXDTO(ФабрикаXDTO));
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
РезультатСтрокой = ЗаписьJSON.Закрыть();

Шаг 4. Отправка HTTP-ответа

Теперь проанализируем, как правильно вернуть эти данные сайту. Нам нужно создать объект HTTPСервисОтвет, установить код состояния 200 (ОК), указать тип контента и поместить нашу JSON-строку в тело ответа.


Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(РезультатСтрокой, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Возврат Ответ;

Шаг 5. Публикация и настройка веб-сервера

Чтобы сервис стал доступен в интернете, его необходимо опубликовать на веб-сервере (IIS или Apache). Рассмотрим этот процесс:

  1. В конфигураторе выберите Администрирование -> Публикация на веб-сервере.
  2. Укажите имя публикации и выберите используемый веб-сервер.
  3. На закладке HTTP-сервисы установите флажок напротив вашего сервиса.
  4. Нажмите "Опубликовать".

Важный нюанс: для высокой скорости работы настройте пул соединений в файле default.vrd. Это позволит 1С не создавать новый сеанс для каждого запроса, а использовать уже открытые, что сократит время ответа с секунд до миллисекунд.

Шаг 6. Тестирование сервиса

Посмотрим, как проверить работу сервиса без написания кода на стороне сайта. Рекомендуем использовать бесплатный инструмент Postman или аналогичные расширения для браузера.

Обработка ошибок и безопасность

При разработке профессионального сервиса обязательно используйте конструкцию Попытка...Исключение. Если данные не найдены, хорошим тоном считается возврат кода 404, а в случае системной ошибки — кода 500.

Для обеспечения безопасности создайте в 1С отдельного пользователя с ограниченными правами. У этого пользователя не должно быть доступа к интерфейсу, только права на чтение конкретных справочников и регистров, необходимых для работы сервиса.

← На главную