gifts2017

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

Опубликовал Sergey Andreev (starik-2005) в раздел Обмен - Интеграция с 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С.

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

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Лустин (lustin) 21.04.16 11:43
2. Дмитрий Иванов (ikekoval) 21.04.16 11:50
3. Sergey Andreev (starik-2005) 21.04.16 12:07
(1) lustin, ну тоже имеет право на существование, просто в браузере как-то удобнее - не надо никаких дополнительных программ устанавливать.
4. Алексей Роза (DoctorRoza) 21.04.16 13:47
Но т.к. я виндос на веб-серверах, серверах 1С и серверах баз данных в принципе не использую, то я, как настоящий мужик, буду все делать из командной строки

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

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

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


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

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

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


утюгчеловек; +1 Ответить
9. Sergey Andreev (starik-2005) 22.04.16 09:00
(7) awk, с точки зрения данной статьи и технологической платформы 1с - так и есть. И ничего с этим, увы, не поделать.
10. Василий Казьмин (awk) 22.04.16 10:24
(9) starik-2005, Кто из вас врет?

Кто из вас врет? 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. Простота - это хорошо, а обман - это плохо...
11. Василий Казьмин (awk) 22.04.16 10:26
Пока влепил минус. За то что статья содержит недостоверные данные.
12. Sergey Andreev (starik-2005) 22.04.16 13:29
(10) awk, да никто не врет. Это у Вас в голове много лишгего.
13. Михаил Краснобаев (milo1) 22.04.16 15:33
Как пример использования веб-сервисов писал вот тут http://infostart.ru/public/461675/
14. Алексей Лустин (lustin) 23.04.16 08:22
(3) starik-2005, да скорее всего в браузере удобней (Кстати - за статью спасибо, буду давать ее ссылку тем кто начинает работать с сервисами)

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

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

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

P.S. Есть еще https://github.com/jarrodek/advanced-rest-client - для быстрых игр с REST API. Может кому пригодиться.
15. Sergey Andreev (starik-2005) 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. Ссылка от Валентина Будкина
17. Яков Коган (Yashazz) 25.04.16 23:42
Я вообще тут статьи не увидел. Кусок мануала, кусок из "проф.разработки" и с ИТС, пара очевидных действий, ну и немножко про некий софт, который надо отдельно качать, настраивать, согласовывать с админами; и не факт, что гарантированно работоспособный. Тогда как на ИС полно тестилок и дёргалок веб-сервисов средствами платформы.

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

Про остальное уже сказали.
h00k; утюгчеловек; +2 Ответить 1
18. Sergey Andreev (starik-2005) 26.04.16 09:21
(17) Yashazz, пть надо меньше - и вся муть в глазах пройдет. Ну или тест на логику пройти, чтобы понять, куда двигаться. ))
19. Яков Коган (Yashazz) 26.04.16 10:03
(18) starik-2005, а вот хамить не надо и на личности переходить тоже. Учитесь вести себя в приличных местах подобающим образом, молодой человек.
20. Sergey Andreev (starik-2005) 26.04.16 11:51
(19) Yashazz, нет, не видел, кто тут правила приличия нарушает. Если Вам что-то непонятно - спросите. Если имеете мнение - выскажите. Если Вам что-то показалось - креститесь. Не стоит думать о том, что Ваше мнение лучше, чем чье-то еще. Отдыхайте.
21. Sergey Andreev (starik-2005) 27.04.16 11:27
Вчера посмотрел расширения для Chrome, в итоге ничего кроме бумеранга толкового не обнаружил. По крайней мере для совместного дергания SOAP и REST.
22. борян петров (TODD22) 15.05.16 06:55
А в чём разница между web и http сервисами? И когда следует использовать web а когда http сервис?
23. Sergey Andreev (starik-2005) 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 Дронов (kiruha) 14.07.16 16:38
Тоже давно использую SoapUI - никакие расширения даже близко не лежат.
Это решения разного уровня.
И он бесплатен.
И аналитиков/тестировщиков приучил.