Павел чистов. Web-сервисы (SOAP), HTTP-сервисы, oData (автоматический REST-сервис)Новый курс В стоимость очного курса-погружения включено




Столкнулся с необходимостью получения текущего состояния конфигурации. Необходимо получать:

  • Количество документов с определённым отбором;
  • Период последней зарегистрированной цены на товар;
  • Количество проведённых документов по пользователям за последние 10 минут.

Учитывая опыт реализации мобильного приложения в проектах сначала мелькнула мысль написать конфигурацию под android. Взвесив все «за» и «против» пришел к выводу что для решения моей задачи данный подход не подойдёт. Затем был взят курс на использование http-сервиса. Для этого в конфигурации был зарегистрирован http-сервис «Статистика», добавлен шаблон url ЛюбойURL, у которого был добавлен get метод.


После формирования объектов дерева конфигурации принимаемся за написание алгоритма формирования ответа. Метод будет возвращать ответ типа HTTPСервисОтвет:

После написания кода ответа публикуем http-сервис из конфигуратора и обращаемся к нему из браузера. Для обращения к http-сервису надо обращаться по адресу как в веб-клиент добавив «/hs/statistic/». hs говорит платформе что идёт обращение к http-сервису, а statistic это имя нашего сервиса.

По моему мнению http-сервисы могут быть полезны в случае:
— Формирование статистики по конфигурации;
— Функционал получения статуса заказа по его номеру;
— Подготовка данных для импортирования в другие системы.

Компания «» активно развивает платформу "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-сервисов мы поговорим в отдельной заметке, а пока просто создадим новый 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-сервисы с минимум трудозатрат в чем вы и должны были убедиться после прочтения этой небольшой заметки. Функциональная возможность существенно расширяет варианты применения платформы. В следующих заметках мы поговорим о практических кейсах применения технологии и рассмотрим реализацию различных решений на практике.

Если вы ничего не понимаете в WEB технологиях и такие слова, как json, get, post и прочее для вас ничего не значат и вы просто заядлый 1С-ник до мозга костей, но вам кровь из носу надо подружить 1С со сторонними приложениями или сайтом, то эта статья для вас.

Начну с того, что когда-то я был вынужден самостоятельно разбираться с Web-сервисами. Тогда как-то потихоньку мне удалось освоить это дело и понять, что и куда надо нажать, чтобы все заработало. Благо конфигурация, с которой пришлось работать, уже была напичкана Web-сервисами и можно было подглядеть и сделать по аналогии, а также в интернете мне удалось найти достаточно статей по этому делу. И так, на примерах (для меня это лучший способ изучения), я освоил это дело, и теперь меня они уже не пугают.

ИТАК. Основной задачей любой интеграции, будь то КД, Web-сервисы или HTTP-сервисы, является что-нибудь откуда-нибудь передать, что-нибудь с этим сделать и вернуть ответ. Вот в таком формате мы и рассмотрим новую технологию.

В дереве метаданных HTTP-сервисы располагаются в ветке Общие:

Добавляется новый HTTP-сервис точно так же, как и любой другой объект метаданных. Имя и синоним как хотите. Тут важен только "Корневой URL" - это, собственно, и есть идентификатор HTTP-сервиса в данной базе, т.е. именно то, что вы напишете в этом свойстве, вы передадите стороннему разработчику (ну или себе) в качестве ссылки на сервис.

Уж не знаю, можно ли тут писать кириллицей, но чтобы вас в прогрессивном мире не засмеяли, пишите латиницей).

Тут важно само свойство Шаблон:

С помощью шаблона вы впоследствии сможете обратить к тем данным, которые вам передали. ИТАК: все данные, которые вы хотите получить извне, можно разделить на 2 блока - обязательные и не обязательные.

Обязательные данные/параметры запихиваем в шаблон, тем самым если тот, кто обращается к сервису, их не заполнил, то сервис априори выдаст ошибку, а вы при разработке текста модуля обработчика будете уверены, что эти данные есть. Как это делается: в строке Шаблон в фигурных скобках "{}", чередуя с со знаком "/", пишем имена переменных. Например, нам обязательно нужен артикул - тогда пишем /{artikul}. Если нам надо получить артикул, имя и имя пользователя, строка шаблона будет выглядеть так: /{artikul}/{name}/{user} и т.д. Каждый из таких параметров в тексте модуля обработчика можно будет получить так: Запрос.ПараметрыURL["<имя параметра>"]. Если обязательных нет, то шаблон выглядит так: /*.

Не обязательные данные, которые мы хотим получать через сервис, в шаблоне НЕ описываются. При построении ссылки, для обращения к сервису они описываются в конце ссылки после знака "?", разделяются символом амперсанда "&" и имеют структуру <имя параметра>=<значение параметра>. В тексте модуля обработчика к ним можно обратиться конструкцией: Запрос.ПараметрыЗапроса.Получить("<имя параметра>"). НО: важно помнить, раз они не обязательны, то их может и не быть, соответственно значение проверяем на Неопределено.

Далее добавляем новый метод для нашего шаблона. Тут важно свойство HTTP-метод. Их тут огромное количество, НО мы не будем вдаваться во все тонкости. Для реализации любой вашей задачи вам нужны только 2: GET и POST.

Как выбрать: Если того, что мы с вами описали в двух предыдущих абзацах, для работы вам достаточно, т.е. все нужные вам данные вы сможете получить с помощью обязательных и не обязательных параметров самого запроса, то берем GET. В этом случае в любом браузере, если вы правильно введете адресную строку, вы увидите результат действия своего HTTP-сервиса - ПРОФИТ! Если вдруг для работы вашего сервиса нужны данные в более сложном виде (xml например, или еще чего), то, что нельзя запихнуть в простую адресную строку, то берем POST. Из минусов такая легкая проверка через адресную строку браузера, как с GET, не прокатит, но на просторах интернета легко можно найти какие-нибудь сайты, на которых можно проверить сервисы методом POST (например, сайт https://www.hurl.it). В случае, если выбран метод POST, то у запроса помимо URL (адреса) появляется тело, в которое можно запихнуть все, что угодно, а в обработчике метода обратиться к нему через конструкцию Запрос.ПолучитьТелоКакСтроку(). У любого шаблона может быть как GET метод, так и POST. У них будут соответственно разные обработчики, а 1С-ка в зависимости от того, как был отправлен запрос, будет выбирать тот или иной метод.

Обработчик HTTP-сервиса - это функция, которая всегда возвращает значение типа HTTPСервисОтвет, который строится конструктором Новый HTTPСервисОтвет(<КодСостояния>). <КодСостояния> - это число, чтобы не мучаться с выбором что писать, пишем: 200 - если все хорошо и вы возвращаете какое то логичное значение, 400 - если ошибка и вы возврщаете описание ошибки. У данного типа есть различные методы (можно почитать в синтакс помошнике, там все понятно написано). Опять же, всегда можно вернуть все что нужно в виде строки - метод УстановитьТелоИзСтроки(). (одна небольшая хитрость: если вы возвращаете html и хотите чтобы браузер при вводе в адресную строку адреса вашего сервиса на экране красиво отобразил его, в свойстве ответ Заголовки напишите: Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8") - тем самым вы укажите, что это не просто набор символов, а HTML и его надо показать соответствующе)

После того как вы все сделаете, HTTP-сервис надо опубликовать. Делается это на компьютере с установленным веб-сервером (про настройки писать не буду, есть полно статей) через меню:

Администрирование - Публикация на веб сервере.

Там закладка HTTP-сервисы. Ставим галки и нажимаем "Опубликовать"

Внимание! Теперь курс проводится и в вечернее время с 18:30 до 21:30 в формате погружения.

На курсе Вы получите практические навыки по использованию следующих механизмов платформы "1С:Предприятие 8":

  • WEB-сервисы (протокол SOAP)
  • Формат JSON
  • Интерфейс oData (автоматически REST-сервис)
  • HTTP-сервисы

ВАЖНО!!! Курс рассчитан на программистов, которые владеют навыками по работе с механизмом XDTO, или ранее прошли курс .

Описание и программа курса:

В стоимость WEB-курса включено:

  • 2 недели курса, 2 вебинара с преподавателем
  • свидетельство 1С-Учебного центра №3 (при условии выполнения практики)

В стоимость очного курса-погружения включено:

  • 2 дня с 10:00 до 17:00 или 4 вечера с 18:30 по 21:30
  • конспект, наушники
  • обеды, кофе-брейки
  • доступ на 2 года к обновляемым видеоматериалам после окончания курса
  • свидетельство 1С-Учебного центра №3

Форматы обучения

WEB-обучение

Что это за формат: Предлагаемый формат сочетает многие преимущества дистанционного обучения с очной составляющей, представленной видеоматериалами и онлайн-консультациями.
WEB-курс состоит из видеороликов, практических задач и вебинаров с преподавателям. Ко всем материалам курса предоставляется круглосуточный доступ через Интернет – можно заниматься в удобное время. Курс разделен на занятия. В течение занятия изучаются материалы по текущей теме, выполняются практикумы, задаются вопросы преподавателю. В конце каждого занятия проводится вебинар, на котором преподаватель разбирает все поступившие вопросы, типовые ошибки, объясняет правильное решение. Запись вебинаров доступна в портале. Таким образом проходят несколько занятий одно за другим. В конце проводится итоговая самостоятельная работа и итоговый вебинар.

Продолжительность: 2 недели

Что это за формат:


Продолжительность: 16 академических часов

Что это за формат: Очный курс-погружение - формат, сочетающий в себе все плюсы очного обучения, дистанционных технологий и индивидуального обучения. Занятия проходят в оборудованном учебном классе, Вы самостоятельно изучаете материалы курса (пошаговые видеоролики) и выполняете практикумы. При этом в аудитории находится преподаватель, который готов в любой момент ответить на вопрос и помочь с решением практических задач, а также проверить правильность их выполнения.
Преимущества – индивидуальные консультации преподавателя по Вашим вопросам, подходящий лично для Вас темп прохождения материала.
Все это дает более глубокую проработку материала курса.
Этот курс возможно пройти со своего рабочего места с полным эффектом присутствия преподавателя там, где ученик! Если эта возможность Вас заинтересовала – позвоните нам!

Продолжительность: 16 академических часов

Похожие публикации