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

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

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

ВВЕДЕНИЕ

В последнее время я все чаще встречаюсь с ситуацией, когда клиенту требуется интеграция, и он хочет для этого создать веб-сервис в 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С.

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

33 Comments

  1. lustin

    (0) просто ссылки

    https://www.soapui.org/

    http://jmeter.apache.org/

    Reply
  2. ikekoval

    Супер!

    Reply
  3. starik-2005

    (1) lustin, ну тоже имеет право на существование, просто в браузере как-то удобнее — не надо никаких дополнительных программ устанавливать.

    Reply
  4. DoctorRoza
    Но т.к. я виндос на веб-серверах, серверах 1С и серверах баз данных в принципе не использую, то я, как настоящий мужик, буду все делать из командной строки

    Наш человек! 🙂

    Reply
  5. awk
    веб-сервис — это некое определение списка функций и их параметров через XSD схему,

    Что-то кривое определение. в Вики интереснее:

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

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

    За прогу спасибо, но статью надо переделывать…

    Reply
  6. starik-2005

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

    Reply
  7. awk

    (6) Тогда REST — это не web service. Там ведь нет XSD или WSDL.

    Reply
  8. Makushimo

    ..понятный текст статьи..

    «..буду все делать из командной строки. «№;!»№%!№;:»%;:№;:?ФВАФП УЕЙ№%!№Р»;:;%»:%: эспериамус !»№!№;»№;%:*%:?*%*(:?():»

    ….

    далее понятный текст статьи.

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

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

    Обязательно попробую.

    Reply
  9. starik-2005

    (7) awk, с точки зрения данной статьи и технологической платформы 1с — так и есть. И ничего с этим, увы, не поделать.

    Reply
  10. awk

    (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. Простота — это хорошо, а обман — это плохо…

    Reply
  11. awk

    Пока влепил минус. За то что статья содержит недостоверные данные.

    Reply
  12. starik-2005

    (10) awk, да никто не врет. Это у Вас в голове много лишгего.

    Reply
  13. milo1

    Как пример использования веб-сервисов писал вот тут http://infostart.ru/public/461675/

    Reply
  14. lustin

    (3) да скорее всего в браузере удобней (Кстати — за статью спасибо, буду давать ее ссылку тем кто начинает работать с сервисами)

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

    * игры с производительностью — JMeter позволяет вызывать сервисы в 100 потоков (например)

    * игры в поведение — SOAP-Ui позволяет построить XML тестовый план нескольких последовательных вызовов

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

    P.S. Есть еще https://github.com/jarrodek/advanced-rest-client — для быстрых игр с REST API. Может кому пригодиться.

    Reply
  15. starik-2005

    (14) lustin, Бумеранг умеет дергать REST-API.

    Reply
  16. lustin

    (15) учитывая что я по социальной ленте пустил ссылку на статью — коллеги начинают накидывать более интересных продуктов.

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


    $ http http://www.google.com search==’HTTPie logo’ tbm==isch

    Без всяких GUI 😉

    P.S. Ссылка от Валентина Будкина

    Reply
  17. Yashazz

    Я вообще тут статьи не увидел. Кусок мануала, кусок из «проф.разработки» и с ИТС, пара очевидных действий, ну и немножко про некий софт, который надо отдельно качать, настраивать, согласовывать с админами; и не факт, что гарантированно работоспособный. Тогда как на ИС полно тестилок и дёргалок веб-сервисов средствами платформы.

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

    Про остальное уже сказали.

    Reply
  18. starik-2005

    (17) Yashazz, пть надо меньше — и вся муть в глазах пройдет. Ну или тест на логику пройти, чтобы понять, куда двигаться. ))

    Reply
  19. Yashazz

    (18) а вот хамить не надо и на личности переходить тоже. Учитесь вести себя в приличных местах подобающим образом, молодой человек.

    Reply
  20. starik-2005

    (19) Yashazz, нет, не видел, кто тут правила приличия нарушает. Если Вам что-то непонятно — спросите. Если имеете мнение — выскажите. Если Вам что-то показалось — креститесь. Не стоит думать о том, что Ваше мнение лучше, чем чье-то еще. Отдыхайте.

    Reply
  21. starik-2005

    Вчера посмотрел расширения для Chrome, в итоге ничего кроме бумеранга толкового не обнаружил. По крайней мере для совместного дергания SOAP и REST.

    Reply
  22. TODD22

    А в чём разница между web и http сервисами? И когда следует использовать web а когда http сервис?

    Reply
  23. starik-2005

    (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-запросов к системе управления контентом, данные передаются в соответствии с описанной схемой взаимодействия, УРЛ запроса здесь не меняется и является точкой входа.

    Reply
  24. kiruha

    Тоже давно использую SoapUI — никакие расширения даже близко не лежат.

    Это решения разного уровня.

    И он бесплатен.

    И аналитиков/тестировщиков приучил.

    Reply
  25. starik-2005

    (24) я в последнее время использую curl — рядом с ним вообще все остальное нервно курит в углу. Нужны тесты нагрузки? PHP + curl. Нужен юнит-тест — аналогичная связка (можно питон, bash, sh, … — сотни вещей).

    Reply
  26. user821096

    (25) Я тоже планирую строить обращения к веб-сервису 1с с помошью curl — без линковки библиотек, а просто вызывая утилиту с соответствующими параметрами. Подскажите, пожалуйста, как можно передать логин/пароль пользователя 1с ?

    Reply
  27. starik-2005

    (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
    Reply
  28. vasilev2015

    Скажите, Сергей, программа «Бумеранг» сейчас платная ?

    Reply
  29. starik-2005

    (28) это не совсем «программа» — это расширение к браузеру Chrome. На сколько я знаю она бесплатна. Хотя, как я понял, есть и лицензия. Делает ее судя по фотке какой-то индус.

    Reply
  30. herfis

    Неоднократно слыхал, что как более человечную альтернативу curl частенько юзают httpie (даже те, кто хорошо знает curl — так просто проще и продуктивнее).

    Вот и Лустин ее в (16) упоминает. Есть в большинстве стандартных репозиториев. Учитывая, что она на питоне — можно и под виндой.

    Хотя под виндой CLI не имеет такого сакрального смысла, как под linux — что-то гуевое заюзать еще проще и продуктивнее.

    Reply
  31. starik-2005

    (30)

    httpie

    На первый взгляд штука хорошая.

    А по поводу гуевого под линух, то смотря зачем. Если для автотестов, то лично мне проще создать на PHP что-то с curl’ом (инсайд), чем что-то гуевое где-то искать.

    Reply
  32. dock

    а для firefox есть расширение ?

    Reply
  33. gglvov

    Спасибо!

    Отличный инструмент! Раньше использовал curl, но с бумерангом гораздо проще передавать параметры со сложной структурой.

    Очень наглядная отладка сервисов с большим количеством функций и при этом сразу наглядное документирование сервиса

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *