Дай дернуть-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С.

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

веб-сервисы

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    15746    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

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

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

5040 руб.

04.05.2021    17548    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16359    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25741    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88580    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lustin 21.04.16 11:43 Сейчас в теме
user1619761; gradi; JohnyDeath; kiruha; invertercant; +5 Ответить
3. starik-2005 3033 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 3033 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 498 04.09.17 12:27 Сейчас в теме
Неоднократно слыхал, что как более человечную альтернативу curl частенько юзают httpie (даже те, кто хорошо знает curl - так просто проще и продуктивнее).
Вот и Лустин ее в (16) упоминает. Есть в большинстве стандартных репозиториев. Учитывая, что она на питоне - можно и под виндой.
Хотя под виндой CLI не имеет такого сакрального смысла, как под linux - что-то гуевое заюзать еще проще и продуктивнее.
31. starik-2005 3033 04.09.17 13:05 Сейчас в теме
(30)
httpie
На первый взгляд штука хорошая.

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

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

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

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


За прогу спасибо, но статью надо переделывать...
Dementor; kuntashov; invertercant; +3 Ответить
6. starik-2005 3033 21.04.16 18:36 Сейчас в теме
(5) awk, ага, еще расскажи, чем мое определение отличается от определения в вики))) В действительности, веб-сервис, описываемый мной, и REST-интерфейс - это разные сущности в рамках вышеизложенного описания. И таки да - веб-сервис, собственно, - это и есть дуализм определения (описания) схемы в виде XSD и, понятное дело, самих функций, в схеме описанных. Но что бы быть проще - надо учиться проще формулировать. Т.е. так, как это делаю я )))
7. awk 741 21.04.16 21:57 Сейчас в теме
(6) Тогда REST - это не web service. Там ведь нет XSD или WSDL.
9. starik-2005 3033 22.04.16 09:00 Сейчас в теме
(7) awk, с точки зрения данной статьи и технологической платформы 1с - так и есть. И ничего с этим, увы, не поделать.
10. awk 741 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 3033 22.04.16 13:29 Сейчас в теме
(10) awk, да никто не врет. Это у Вас в голове много лишгего.
8. Makushimo 160 22.04.16 06:17 Сейчас в теме
..понятный текст статьи..
"..буду все делать из командной строки. "№;!"№%!№;:"%;:№;:?ФВАФП УЕЙ№%!№Р";:;%":%: эспериамус !"№!№;"№;%:*%:?*%*(:?():"
....
далее понятный текст статьи.

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

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


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

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

Про остальное уже сказали.
h00k; утюгчеловек; +2 Ответить
18. starik-2005 3033 26.04.16 09:21 Сейчас в теме
(17) Yashazz, пть надо меньше - и вся муть в глазах пройдет. Ну или тест на логику пройти, чтобы понять, куда двигаться. ))
19. Yashazz 4709 26.04.16 10:03 Сейчас в теме
(18) а вот хамить не надо и на личности переходить тоже. Учитесь вести себя в приличных местах подобающим образом, молодой человек.
20. starik-2005 3033 26.04.16 11:51 Сейчас в теме
(19) Yashazz, нет, не видел, кто тут правила приличия нарушает. Если Вам что-то непонятно - спросите. Если имеете мнение - выскажите. Если Вам что-то показалось - креститесь. Не стоит думать о том, что Ваше мнение лучше, чем чье-то еще. Отдыхайте.
21. starik-2005 3033 27.04.16 11:27 Сейчас в теме
Вчера посмотрел расширения для Chrome, в итоге ничего кроме бумеранга толкового не обнаружил. По крайней мере для совместного дергания SOAP и REST.
22. TODD22 18 15.05.16 06:55 Сейчас в теме
А в чём разница между web и http сервисами? И когда следует использовать web а когда http сервис?
23. starik-2005 3033 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 3033 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 3033 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 2686 04.09.17 12:06 Сейчас в теме
Скажите, Сергей, программа "Бумеранг" сейчас платная ?
29. starik-2005 3033 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 223 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 3033 04.03.22 10:42 Сейчас в теме
(34)
к бесшовному 1С:Документообороту как сделать запрос?
Честно пЫонерское, я пытался (видит Бог!), но психанул и написал свой сервис со стороны документооборота. Две недели палкой тыкал внутренности, но там достаточно большой вложенности схема с кучей друг от друга наследуемых объектов, а в параметрах сервисов как раз такой вот "полиморфный" объект в качестве сообщения, в котором другой полиморфный объект в качестве документа/справочника. При этом свою функцию для сервиса я написал за час (передача накладной приходной из какой-то системы в документооборот).

В части ошибки, то у вас в ошибке указано, что сервис не смог распознать параметр запроса, т.к. он не соответствует схеме. Но помнится мне, что в документообороте идентификаторы сообщений и прочие - это не базовые типы, а объекты. Но нужно смотреть схему...
Оставьте свое сообщение