Персональный блог Игоря Антонова aka "spider_net"

Пример создания HTTP-сервиса в 1С:Предприятие 8.3. Часть 1


Рубрика: 1С:Предприятие -> Программирование
Метки: | | |
Просмотров: 53585
Пример создания HTTP-сервиса в 1С:Предприятие 8.3. Часть 1

Компания «» активно развивает платформу "1С:Предприятие" и с каждым релизом добавляет новые возможности. После старта развития ветки 8.3 новинок стало появляться особенно много и из-за постоянной занятости не успеваешь их все опробовать в деле. Не так давно я рассказывал и показывал как разработать полноценное мобильное приложение (да-да, на "1С:Предприятие"), а сегодня мне хотелось бы поговорить о создании HTTP-сервисов средствами платформы.

Возможность разработки HTTP-сервисов в составе конфигурации появилась еще в версии 8.3.5. За это время компонента несколько раз обновлялась, и сегодня ей вполне можно пользоваться, не опасаясь за наличие «детских» ошибок. Мне еще не доводилось применять функционал платформы «1С:Предприятие» для создания http-сервисов в реальных условиях, поэтому пока опыт ограничивается учебными проектами. Однако, я вижу перспективы применения механизма http-сервисов в одном из текущих рабочих проектов. В этом цикле небольших заметок попробую показать типовые примеры использования http-сервисов в конфигурациях для платформы «1С:Предприятие».

Создание простейшего http-сервиса в 1С:Предприятие 8.3

Сегодня мы рассмотрим пример самого простейшего http-сервиса, а затем будем его улучшать и усложнять. Цель урока – понять и прочувствовать простоту создания http-сервисов на базе платформы «1С:Предприятие 8.3».

Начнем, с формулировки задачи. Создаваемый в рамках заметки сервис должен уметь всего лишь две вещи: принимать GET запрос и отдавать ответ в формате JSON. Задача банальная и сделать что-то подобное на PHP/ASP .NET дело нескольких строчек кода. Забегая вперед, скажу, что в «1С:Предприятие» нам потребуется примерно столько же (ладно вам, не надо смеяться над странностями платформы 1С).

HTTP-сервисы в 1С:Предприятие

Про кейсы применения http-сервисов мы поговорим в отдельной заметке, а пока просто создадим новый http-сервис. Для удобства создадим новую информационную базу с пустой конфигурацией. Добавим в нее одну подсистему, которую назовем «ТестированиеHTTPСервисов». Теперь откроем в дереве конфигурации раздел «Общие», найдем в нем группу «HTTP-сервисы» и добавим первый веб сервис. В окне создания нового сервиса заполним поля:

  • Имя - ПервыйВебСервис;
  • Синоним - Первый веб сервис;
  • Корневой URL - our-services;

Добавление в конфигурацию нового сервиса

Обратите внимание на поле «Корневой URL». Указанное здесь наименование будет использоваться при обращении к сервису. Здесь не должно быть пробелов и желательно не использовать кириллицу. С этим разобрались, дальше переходим на закладку «Подсистемы» и добавляем http-сервис в единственную доступную подсистему.

Следующим шагом будет описание шаблона URL. Перейдем на соответствующую закладку и добавим шаблон с именем «ВывестиСписокУслуг». В инспекторе свойств найдем свойство «Шаблон» и напишем в нем «/list». Этим самым мы зададим путь, по которому будет происходить взаимодействие с http-сервисом. Шаблон может содержать специальные символы, позволяющие определить передаваемые параметры (как обязательные, так и нет), но для первого примера мы ограничимся простым «/list». При переходе по этому пути будет срабатывать наш единственный метод, и отдавать клиенту набор данных.

Отлично, шаблон есть, теперь дело за методом. Добавим для нашего шаблона, который назовем getServicesList. В инспекторе свойств нам необходимо указать HTTP-метод. Указанное значение определяет, на какие типы запросов будет реагировать наш метод. Текущая задача вполне позволяет обойтись методом “GET”.

Дерево конфиуграции

Наш сервис почти готов, остается только прописать обработчик события для сконструированного метода getServicesList. Создать обработчик события можно через инспектор свойств. В теле обработчика пишем:

Функция ВывестиИндексgetServicesList(Запрос)
	
	МассивУслуг = Новый Массив;
	МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №1", "Описание услуги №1"));
	МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №2", "Описание услуги №2"));
	МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №3", "Описание услуги №3"));
	МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №4", "Описание услуги №4"));
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	ЗаписатьJSON(ЗаписьJSON, МассивУслуг);
	
	СтрокаДляОтвета = ЗаписьJSON.Закрыть();
		
	Ответ = Новый HTTPСервисОтвет(200);	
	Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8");
	
	Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
		
	Возврат Ответ;
	
КонецФункции

Разберем приведенный код чуть подробней. В самом начале я описываю массив, состоящий из структур. Этот массив нам нужен сугубо для демонстрации. Все его содержимое мы переведем в JSON и отдадим клиенту. Инициализируем объект типа ЗаписьJSON. Обязательно вызываем метод УстановитьСтроку(), т.к. нам необходимо получить текст JSON в строковую переменную. Далее вызываем глобальный метод ЗаписатьJSON(), которому передаем объект типа ЗаписьJSON и массив, который необходимо конвертнуть. Дальше получаем результат в переменную «СтрокаДляОтвета» и готовим HTTP-ответ.

В ответ мы добавляем (см. метод «УстановитьТелоИзСтроки») получившийся JSON. Все, код демонстрационного примера готов и можно переходить к тестам.

Публикация HTTP-сервиса в 1С:Предприятие 8.3

Опубликуем созданный HTTP-сервис для тестирования результатов проделанной работы. Для простейшего теста в вашей систем должен быть установлен веб-сервер. У меня роль веб-сервиса выполняет Apache. Шаги, необходимые для установки/настройки веб-сервера мы пропустим, а перейдем к вопросу публикации HTTP-сервиса.

Для публикации необходимо перейти в меню «Администрирование» и выбрать пункт «Публикация на веб-сервере». В появившемся окне заполняем:

  • Имя – имя нашего решения. Оно будет использоваться в URL при доступе к опубликованной ИБ. Например, если указать здесь test, то ваша ИБ будет доступна по адресу http://localhost/test. Меня устраивает вариант test.
  • Веб-сервер - Заполняется автоматически. У меня в качестве веб-сервера используется Apache 2.2;
  • Каталог – путь к директории, в которую будет помещен конфигурационный файл публикуемой ИБ;
  • Снимаем флажки «Публиковать тонкий клиент и веб-клиент», «Публиковать стандартный интерфейс OData», «Публиковать WEB-сервисы по умолчанию»;
  • На вкладке HTTP-сервисы отмечаем флаг «Публиковать HTTP-сервисы по умолчанию» и в табличной части отмечаем созданный сервис.

Нажимаем кнопку «Опубликовать», платформа предложит перезапустить веб-сервер – соглашаемся.

Тестируем HTTP-сервис

Для тестирования созданного http-сервиса запустим какой-нибудь браузер и попробуем обратиться к нему. Если вы повторяли все мои действия, то путь должен получиться таким:

http://localhost:9090/services/hs/our-services/list

Стоит обратить внимание на порт 9090, который указан через двоеточие после имени хоста. Если вы ставили Apache с настройками по умолчанию, то у вас он будет слушать 80-й порт, следовательно, ничего указывать не нужно. В итоге URL будет таким:

http://localhost/services/hs/our-services/list

Попробуйте перейти по нему, и если все работает корректно, вы получите страницу с данными в JSON формате:

[
	{
	 title: "Услуга №1",
	 description: "Описание услуги №1"
        },
	{
	 title: "Услуга №2",
	 description: "Описание услуги №2"
        },
        {
	 title: "Услуга №3",
         description: "Описание услуги №3"
        },
	{
	 title: "Услуга №4",
	 description: "Описание услуги №4"
        }
]

На этом рассмотрение демонстрационного примера можно заканчивать, но мне хотелось бы напоследок разобрать URL на составляющие элементы, чтобы было понятно почему мы получили именно такую ссылку.

Итак, первая часть должна быть понятна – localhost. Это имя хоста, на котором установлен веб-сервер. Дальше указывается ссылка (services) на опубликованную ИБ. Следом идет hs, этот элемент пути указывает, что нас интересует взаимодействие с http-сервисом. Последние два элемента – корневой URL нашего сервиса и шаблон URL.

Результат

Вместо заключения

«1С:Предприятие 8.3» позволяет создавать простые HTTP-сервисы с минимум трудозатрат в чем вы и должны были убедиться после прочтения этой небольшой заметки. Функциональная возможность существенно расширяет варианты применения платформы. В следующих заметках мы поговорим о практических кейсах применения технологии и рассмотрим реализацию различных решений на практике.

Оставьте комментарий!
comments powered by HyperComments