Дай дернуть-2! Обращение к веб-сервисам с помощью подручных средств

21.04.16

Интеграция - WEB-интеграция

Как показала практика, о веб-сервисах знает почти каждый программист, но о том, как их готовить, - весьма ограниченный круг. Давайте интереса ради замутим сервис и дернем его с помощью простого подручного средства - "Бумеранг"!

Всем хорошего времени суток. Давно не писал я, ибо решал задачи государственной важности и было не до мудрых нравоучений подрастающему поколению ))) Давайте рассмотрим, как создать сервис и дернуть его с помощью замечательного расширения для хрома "Бумеранг".

ВВЕДЕНИЕ

В последнее время я все чаще встречаюсь с ситуацией, когда клиенту требуется интеграция, и он хочет для этого создать веб-сервис в 1С. Я активно такие идеи у клиентов поддерживаю и взращиваю, соглашаясь с ними и выражая всеми своими выражениями здравость подобного подхода. При этом, конечно, понимая, что кроме меня не так много народу делают подобные штуки с легкостью врожденной непринужденности. Многие же миряне откровенно хиреют от подобных задач. Дабы переломить тенденцию и преодолеть их внутренние комплексы, я и пишу на данном сайте свои статьи.

ЧТО ЕСТЬ ВЕБ-СЕРВИС

Собственно, веб-сервис - это некое определение списка функций и их параметров через XSD схему, получаемую внешним приложением посредством HTTP-запроса к HTTP-серверу. В контексте 1С - это перечень определенных в 1С в качестве веб-сервиса функций, которые публикуются на HTTP-сервере (apach2/apache2.2/IIS) и доступны для внешних систем по соответствующей HTTP-ссылке. 1С прицепляет в конфиги серверов свою библиотеку, которая и коннектится к 1С, дергая ту или иную описанную в 1С функцию веб-сервиса.

Т.е. схема проста:

1. Программист 1С создает в 1С объект конфигурации Веб-сервис с нужным именем. Дальше в веб-сервисе создаются функции и определяются их параметры.

2. Администратор публикует веб-сервис из конфигуратора 1С на веб-сервере, после чего веб-сервер перезапускает.

3. Внешняя программа может получить доступ к описанию веб-сервиса по адресу http[s]://имя_веб-сервера:порт/имя_публикации/ws/имя_сервиса.1cws?wsdl

4. Внешняя программа может вызвать функцию веб-сервиса, передав посредством запроса POST тело запроса функции с параметрами и получить в ответ результат функции, который оная функция в языке 1С возвращает с помощью команды "возврат мой_результат".

СВАЯЕМ ПРОСТОЙ СЕРВИС

Итак, для того, чтобы сваять примитивный сервис, мы можем создать новую конфигурацию и прсто добавить новый сервис. Допустим, назовем его TestWs. Дальше добавим к нему операцию с названием ОперацияTestWs, у которой укажем параметр "ПараметрTestWs" с типом Строка. Вообще, стоит отметить, что параметры веб-сервисов и возвращаемые ими значения описываются типами XDTO-пакетов. Параметр типа "строка" (по-умаолчанию) будет описан, как "string (http://www.w3.org/2001/XMLSchema)".

Собственно, у нас получилось что-то такое:

Сразу хочется предупредить: если Вы нажмете на пиктограмке "Открыть" в поле "Имя процедуры" до того, как создадите параметр, то функция создастся без параметров. И если Вы после этого параметр добавите, то автоматически он в функцию не попадет - придется или удалять функцию, очищать поле "Имя процедуры" и заново нажимать "Открыть", или вручную добавлять имя параметра в модуль функции.

Итак, вот мы создали сервис и функцию. Давайте теперь добавим простой код, возвращающий текущую дату и время:

Возврат ""+ТекущаяДата();

Таким образом мы производим неявное приведение типа по первому аргументу к строке. Осталось опубликовать и дернуть.

ПУБЛИКАЦИЯ

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

K53SC:/opt/1C/v8.3/x86_64$ sudo ./webinst -apache22 -wsdir testws -dir /var/www/testws -connstr "Srvr=192.168.1.5;Ref=testws;"

И, собственно, база у меня опубликовалась. Дальше я правлю vrd-файл, прописывая туда точку входа:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/testws"
ib="Srvr=192.168.1.5;Ref=testws;"
enable="false">
<ws>
<point name="Testws"
alias="testws.1cws"
enable="true"/>
</ws>
</point>

После этого перезапускаю веб-сервер:

sudo service apache2 restart

В итоге, когда мы в адресной строке напишем что-то типа "http://localhost/testws/ws/testws.1cws?wsdl", то увидим что-то такое:

 

БУМЕРАНГ

Для того, чтобы вызвать веб-сервис, можно установить расширение для гугл-хрома - Бумеранг. Для этого в меню "Дополнительные инструменты" выберите "Расширения", там нажмите на "Еще расширения" и в строке поиска наберите "Boomerang". Установите его и запустите. Дальше добавьте новый проект:

Нажмите "Ок". В открывшемся окне нажмите на единственную кнопку, предлагающую создать сервис.

В верхнюю строку пропишите http://localhost/testws/ws/testws.1cws?wsdl, в нижнюю имя сервиса.

В итоге слева у вас появится имя сервиса и функция "ОперацияTestWs". Дальше нужно создать запрос. Для этого справа от Функции сервиса нажмите на "стрелочку", открывающую выпадающее меню. В этом меню выберите "Ctreate request".

В итоге у Вас справа отобразится запрос к сервису:

В запросе вместо знака "?" нужно указать  параметр сервиса, который будет ему передан. Дальше нажмите справа кнопку "Send", после чего сервис возвратит Вам запрашиваемые данные:

Собственно, у нас тут дата и время - как в аптеке.

Немножно остановлюсь на последних двух скриншотах. На первом есть вкладка AUTH - на ней можно указать имя пользователя и пароль к сервису. Остальные вкладки мне не пригодились. Для указания параметров, передаваемых веб-сервису, используйте сгенерированный запрос и подставляйте параеметр вместо знака "?".

На втором скриншоте мы видим ответ сервиса. Слева есть три переключателя вариантов отображения: активный - квадрат - полный результат запроса. Глаз - отображение непосредственно результата. И этакий треугольник-самолетик - полный RAW-ответ с заголовками сервера. На закладке "HEADERS" находятся отдельно заголовки ответа сервера. Дальше направо идет информация о длине запроса, времени выполнения, ответе сервера (200 - успешно). Дальше закладка с запросом и закладка с ответом. Сверху в меню "POST" можно выбрать тип запроса (GET/PATCH/PUT/DELETE...) - это все может работать для REST-API 1С.

Надеюсь, данная публикация будет полезна и прольет свет на тему веб-серсисов и доступа к ним, сделая тестирование сервисов простым и понятным делом.

веб-сервисы

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17780    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19844    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1167    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lustin 21.04.16 11:43 Сейчас в теме
user1619761; gradi; JohnyDeath; kiruha; invertercant; +5 Ответить
3. starik-2005 3087 21.04.16 12:07 Сейчас в теме
(1) lustin, ну тоже имеет право на существование, просто в браузере как-то удобнее - не надо никаких дополнительных программ устанавливать.
14. lustin 23.04.16 08:22 Сейчас в теме
(3) да скорее всего в браузере удобней (Кстати - за статью спасибо, буду давать ее ссылку тем кто начинает работать с сервисами)

Но когда начинаешь чуть больше работать с сервисами, на первый план выходит

* игры с производительностью - JMeter позволяет вызывать сервисы в 100 потоков (например)
* игры в поведение - SOAP-Ui позволяет построить XML тестовый план нескольких последовательных вызовов

Нот повторюсь - Бумеранг тупо быстрей поставить чтобы начать "дергать".

P.S. Есть еще https://github.com/jarrodek/advanced-rest-client - для быстрых игр с REST API. Может кому пригодиться.
15. starik-2005 3087 23.04.16 10:14 Сейчас в теме
(14) lustin, Бумеранг умеет дергать REST-API.
16. lustin 25.04.16 11:19 Сейчас в теме
(15) учитывая что я по социальной ленте пустил ссылку на статью - коллеги начинают накидывать более интересных продуктов.

Вот например скрипт на вот таком можно уже класть в git и версионировать https://github.com/jkbrzt/httpie


$ http www.google.com search=='HTTPie logo' tbm==isch


Без всяких GUI ;-)

P.S. Ссылка от Валентина Будкина
herfis; awk; +2 Ответить
30. herfis 513 04.09.17 12:27 Сейчас в теме
Неоднократно слыхал, что как более человечную альтернативу curl частенько юзают httpie (даже те, кто хорошо знает curl - так просто проще и продуктивнее).
Вот и Лустин ее в (16) упоминает. Есть в большинстве стандартных репозиториев. Учитывая, что она на питоне - можно и под виндой.
Хотя под виндой CLI не имеет такого сакрального смысла, как под linux - что-то гуевое заюзать еще проще и продуктивнее.
31. starik-2005 3087 04.09.17 13:05 Сейчас в теме
(30)
httpie
На первый взгляд штука хорошая.

А по поводу гуевого под линух, то смотря зачем. Если для автотестов, то лично мне проще создать на PHP что-то с curl'ом (инсайд), чем что-то гуевое где-то искать.
2. ikekoval 123 21.04.16 11:50 Сейчас в теме
4. DoctorRoza 21.04.16 13:47 Сейчас в теме
Но т.к. я виндос на веб-серверах, серверах 1С и серверах баз данных в принципе не использую, то я, как настоящий мужик, буду все делать из командной строки

Наш человек! :)
5. awk 744 21.04.16 18:04 Сейчас в теме
веб-сервис - это некое определение списка функций и их параметров через XSD схему,
Что-то кривое определение. в Вики интереснее:

Веб-служба, веб-сервис (англ. web service) — идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.

Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (SOAP, XML-RPC, REST и т. д.). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения.


За прогу спасибо, но статью надо переделывать...
Dementor; kuntashov; invertercant; +3 Ответить
6. starik-2005 3087 21.04.16 18:36 Сейчас в теме
(5) awk, ага, еще расскажи, чем мое определение отличается от определения в вики))) В действительности, веб-сервис, описываемый мной, и REST-интерфейс - это разные сущности в рамках вышеизложенного описания. И таки да - веб-сервис, собственно, - это и есть дуализм определения (описания) схемы в виде XSD и, понятное дело, самих функций, в схеме описанных. Но что бы быть проще - надо учиться проще формулировать. Т.е. так, как это делаю я )))
7. awk 744 21.04.16 21:57 Сейчас в теме
(6) Тогда REST - это не web service. Там ведь нет XSD или WSDL.
9. starik-2005 3087 22.04.16 09:00 Сейчас в теме
(7) awk, с точки зрения данной статьи и технологической платформы 1с - так и есть. И ничего с этим, увы, не поделать.
10. awk 744 22.04.16 10:24 Сейчас в теме
(9) Кто из вас врет?

Кто из вас врет? 1С: http://its.1c.ru/db/metod8dev#content:3790:hdoc:_top:rest

Использование REST web-сервисов в "1C:Предприятии 8"

REST (REpresentation State Transfer) подход является одним из наиболее популярных подходов, использующихся для реализации web-сервисов в Интернете. REST web-сервисы являются более легковесными альтернативами SOAP веб-сервисам.


или вы?


P.S. Простота - это хорошо, а обман - это плохо...
12. starik-2005 3087 22.04.16 13:29 Сейчас в теме
(10) awk, да никто не врет. Это у Вас в голове много лишгего.
8. Makushimo 160 22.04.16 06:17 Сейчас в теме
..понятный текст статьи..
"..буду все делать из командной строки. "№;!"№%!№;:"%;:№;:?ФВАФП УЕЙ№%!№Р";:;%":%: эспериамус !"№!№;"№;%:*%:?*%*(:?():"
....
далее понятный текст статьи.

Примерно так, как мирянин, я прочитал эту статью ))))

Большое спасибо за инфу про Бумеранг.
Обязательно попробую.


утюгчеловек; +1 Ответить
11. awk 744 22.04.16 10:26 Сейчас в теме
Пока влепил минус. За то что статья содержит недостоверные данные.
13. milo1 1 22.04.16 15:33 Сейчас в теме
Как пример использования веб-сервисов писал вот тут http://infostart.ru/public/461675/
17. Yashazz 4790 25.04.16 23:42 Сейчас в теме
Я вообще тут статьи не увидел. Кусок мануала, кусок из "проф.разработки" и с ИТС, пара очевидных действий, ну и немножко про некий софт, который надо отдельно качать, настраивать, согласовывать с админами; и не факт, что гарантированно работоспособный. Тогда как на ИС полно тестилок и дёргалок веб-сервисов средствами платформы.

Да и насчёт "подручных средств" не понял. Это автор так обозвал штатную утилиту webinst?

Про остальное уже сказали.
h00k; утюгчеловек; +2 Ответить
18. starik-2005 3087 26.04.16 09:21 Сейчас в теме
(17) Yashazz, пть надо меньше - и вся муть в глазах пройдет. Ну или тест на логику пройти, чтобы понять, куда двигаться. ))
19. Yashazz 4790 26.04.16 10:03 Сейчас в теме
(18) а вот хамить не надо и на личности переходить тоже. Учитесь вести себя в приличных местах подобающим образом, молодой человек.
20. starik-2005 3087 26.04.16 11:51 Сейчас в теме
(19) Yashazz, нет, не видел, кто тут правила приличия нарушает. Если Вам что-то непонятно - спросите. Если имеете мнение - выскажите. Если Вам что-то показалось - креститесь. Не стоит думать о том, что Ваше мнение лучше, чем чье-то еще. Отдыхайте.
21. starik-2005 3087 27.04.16 11:27 Сейчас в теме
Вчера посмотрел расширения для Chrome, в итоге ничего кроме бумеранга толкового не обнаружил. По крайней мере для совместного дергания SOAP и REST.
22. TODD22 19 15.05.16 06:55 Сейчас в теме
А в чём разница между web и http сервисами? И когда следует использовать web а когда http сервис?
23. starik-2005 3087 15.05.16 11:04 Сейчас в теме
(22) TODD22, разница в структуре запроса. HTTP - это так называемый REST-интерфейс (хабр: REST (Representational state transfer) – это стиль архитектуры программного обеспечения для распределенных систем, таких как World Wide Web, который, как правило, используется для построения веб-служб. Термин REST был введен в 2000 году Роем Филдингом, одним из авторов HTTP-протокола). Суть в том, что ты обращаешься к системе, определяя деревом УРЛ'а запрашиваемый элемент или группу элементов, если используется поисковый запрос. Типа http[s]:/урл-сайта/урлсистемы/урлэлемента?параметр_запроса_1=ххх&параметр_зпроса_2=ууу. Т.е. для чтения достаточно обычного GET, который может быть дернут из строки браузера. Для изменения может быть вызван любой метод, который описан в системе управления контентом (будь это 1С или иное решение, например хабр и, походу, инфорстарт тоже - но про последний я точно не знаю). Т.е. это и POST. и PACH и прочие методы.

В веб-сервисах, основанных на SOAP-архитектуре (Simple Object Access Protocol — простой протокол доступа к объектам; вплоть до спецификации 1.2) — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC).), существует еще и описание самого сервиса в виде XSD-схемы. Запросы происходят уже посредством POST-запросов к системе управления контентом, данные передаются в соответствии с описанной схемой взаимодействия, УРЛ запроса здесь не меняется и является точкой входа.
24. kiruha 388 14.07.16 16:38 Сейчас в теме
Тоже давно использую SoapUI - никакие расширения даже близко не лежат.
Это решения разного уровня.
И он бесплатен.
И аналитиков/тестировщиков приучил.
25. starik-2005 3087 26.07.17 15:25 Сейчас в теме
(24) я в последнее время использую curl - рядом с ним вообще все остальное нервно курит в углу. Нужны тесты нагрузки? PHP + curl. Нужен юнит-тест - аналогичная связка (можно питон, bash, sh, ... - сотни вещей).
26. user821096 01.09.17 10:51 Сейчас в теме
(25) Я тоже планирую строить обращения к веб-сервису 1с с помошью curl - без линковки библиотек, а просто вызывая утилиту с соответствующими параметрами. Подскажите, пожалуйста, как можно передать логин/пароль пользователя 1с ?
27. starik-2005 3087 01.09.17 14:25 Сейчас в теме
(26) Ну как-то так:
Use the -u flag to include a username, and curl will prompt for a password:

curl -u username http: // example.com

You can also include the password in the command, but then your password will be visible in bash history:

curl -u username:password http : // example.com
28. vasilev2015 2722 04.09.17 12:06 Сейчас в теме
Скажите, Сергей, программа "Бумеранг" сейчас платная ?
29. starik-2005 3087 04.09.17 12:07 Сейчас в теме
(28) это не совсем "программа" - это расширение к браузеру Chrome. На сколько я знаю она бесплатна. Хотя, как я понял, есть и лицензия. Делает ее судя по фотке какой-то индус.
32. dock 44 03.04.19 17:26 Сейчас в теме
а для firefox есть расширение ?
33. gglvov 15.10.19 08:45 Сейчас в теме
Спасибо!

Отличный инструмент! Раньше использовал curl, но с бумерангом гораздо проще передавать параметры со сложной структурой.
Очень наглядная отладка сервисов с большим количеством функций и при этом сразу наглядное документирование сервиса
34. info1i 236 04.03.22 00:42 Сейчас в теме
Подскажите, пожалуйста, а к бесшовному 1С:Документообороту как сделать запрос?
Там спецификация веб-сервиса описана достаточно подробно, но вот на практике одни ошибки, и почему-то ни одного примера бесшовной интеграции с не1С-приложениями.
Например, как сделать запрос GetVersionRequest?
В расширении Boomerang запрос
<x:Envelope
    xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:dm="http://www.1c.ru/dm">
    <x:Header/>
    <x:Body>
        <dm:execute>
            <dm:DMGetVersionRequest>
                <dm:dataBaseID>68cf0f97-5fac-443d-a6fa-3216e92559a8</dm:dataBaseID>
                <dm:messageId>1</dm:messageId>
                <dm:initialMessageId>1</dm:initialMessageId>
            </dm:DMGetVersionRequest>
        </dm:execute>
    </x:Body>
</x:Envelope>
Показать

Выдает ошибку 500:
<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>Ошибка разбора SOAP сообщения: неизвестный параметр. </faultstring>
            <detail/>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
Показать


Мой вопрос в отдельной теме: https://forum.infostart.ru/forum15/topic278052/?result#postform
35. starik-2005 3087 04.03.22 10:42 Сейчас в теме
(34)
к бесшовному 1С:Документообороту как сделать запрос?
Честно пЫонерское, я пытался (видит Бог!), но психанул и написал свой сервис со стороны документооборота. Две недели палкой тыкал внутренности, но там достаточно большой вложенности схема с кучей друг от друга наследуемых объектов, а в параметрах сервисов как раз такой вот "полиморфный" объект в качестве сообщения, в котором другой полиморфный объект в качестве документа/справочника. При этом свою функцию для сервиса я написал за час (передача накладной приходной из какой-то системы в документооборот).

В части ошибки, то у вас в ошибке указано, что сервис не смог распознать параметр запроса, т.к. он не соответствует схеме. Но помнится мне, что в документообороте идентификаторы сообщений и прочие - это не базовые типы, а объекты. Но нужно смотреть схему...
36. A18D 26.07.24 09:54 Сейчас в теме
Добрый день. Как в 1С прочитать заголовки (header), что передает система источник, в функции веб сервиса (SOAP) системы приемника?
Оставьте свое сообщение