Всем хорошего времени суток. Давно не писал я, ибо решал задачи государственной важности и было не до мудрых нравоучений подрастающему поколению ))) Давайте рассмотрим, как создать сервис и дернуть его с помощью замечательного расширения для хрома «Бумеранг».
ВВЕДЕНИЕ
В последнее время я все чаще встречаюсь с ситуацией, когда клиенту требуется интеграция, и он хочет для этого создать веб-сервис в 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С.
Надеюсь, данная публикация будет полезна и прольет свет на тему веб-серсисов и доступа к ним, сделая тестирование сервисов простым и понятным делом.
(0) просто ссылки
Супер!
(1) lustin, ну тоже имеет право на существование, просто в браузере как-то удобнее — не надо никаких дополнительных программ устанавливать.
Наш человек! 🙂
Что-то кривое определение. в Вики интереснее:
Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (SOAP, XML-RPC, REST и т. д.). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения.
За прогу спасибо, но статью надо переделывать…
(5) awk, ага, еще расскажи, чем мое определение отличается от определения в вики))) В действительности, веб-сервис, описываемый мной, и REST-интерфейс — это разные сущности в рамках вышеизложенного описания. И таки да — веб-сервис, собственно, — это и есть дуализм определения (описания) схемы в виде XSD и, понятное дело, самих функций, в схеме описанных. Но что бы быть проще — надо учиться проще формулировать. Т.е. так, как это делаю я )))
(6) Тогда REST — это не web service. Там ведь нет XSD или WSDL.
..понятный текст статьи..
«..буду все делать из командной строки. «№;!»№%!№;:»%;:№;:?ФВАФП УЕЙ№%!№Р»;:;%»:%: эспериамус !»№!№;»№;%:*%:?*%*(:?():»
….
далее понятный текст статьи.
Примерно так, как мирянин, я прочитал эту статью ))))
Большое спасибо за инфу про Бумеранг.
Обязательно попробую.
(7) awk, с точки зрения данной статьи и технологической платформы 1с — так и есть. И ничего с этим, увы, не поделать.
(9) Кто из вас врет?
Кто из вас врет? 1С:http://its.1c.ru/db/metod8dev#content:3790:hdoc:_top:rest
REST (REpresentation State Transfer) подход является одним из наиболее популярных подходов, использующихся для реализации web-сервисов в Интернете. REST web-сервисы являются более легковесными альтернативами SOAP веб-сервисам.
или вы?
P.S. Простота — это хорошо, а обман — это плохо…
Пока влепил минус. За то что статья содержит недостоверные данные.
(10) awk, да никто не врет. Это у Вас в голове много лишгего.
Как пример использования веб-сервисов писал вот тутhttp://infostart.ru/public/461675/
(3) да скорее всего в браузере удобней (Кстати — за статью спасибо, буду давать ее ссылку тем кто начинает работать с сервисами)
Но когда начинаешь чуть больше работать с сервисами, на первый план выходит
* игры с производительностью — JMeter позволяет вызывать сервисы в 100 потоков (например)
* игры в поведение — SOAP-Ui позволяет построить XML тестовый план нескольких последовательных вызовов
Нот повторюсь — Бумеранг тупо быстрей поставить чтобы начать «дергать».
P.S. Есть ещеhttps://github.com/jarrodek/advanced-rest-client — для быстрых игр с REST API. Может кому пригодиться.
(14) lustin, Бумеранг умеет дергать REST-API.
(15) учитывая что я по социальной ленте пустил ссылку на статью — коллеги начинают накидывать более интересных продуктов.
Вот например скрипт на вот таком можно уже класть в git и версионироватьhttps://github.com/jkbrzt/httpie
$ http http://www.google.com search==’HTTPie logo’ tbm==isch
Без всяких GUI 😉
P.S. Ссылка от Валентина Будкина
Я вообще тут статьи не увидел. Кусок мануала, кусок из «проф.разработки» и с ИТС, пара очевидных действий, ну и немножко про некий софт, который надо отдельно качать, настраивать, согласовывать с админами; и не факт, что гарантированно работоспособный. Тогда как на ИС полно тестилок и дёргалок веб-сервисов средствами платформы.
Да и насчёт «подручных средств» не понял. Это автор так обозвал штатную утилиту webinst?
Про остальное уже сказали.
(17) Yashazz, пть надо меньше — и вся муть в глазах пройдет. Ну или тест на логику пройти, чтобы понять, куда двигаться. ))
(18) а вот хамить не надо и на личности переходить тоже. Учитесь вести себя в приличных местах подобающим образом, молодой человек.
(19) Yashazz, нет, не видел, кто тут правила приличия нарушает. Если Вам что-то непонятно — спросите. Если имеете мнение — выскажите. Если Вам что-то показалось — креститесь. Не стоит думать о том, что Ваше мнение лучше, чем чье-то еще. Отдыхайте.
Вчера посмотрел расширения для Chrome, в итоге ничего кроме бумеранга толкового не обнаружил. По крайней мере для совместного дергания SOAP и REST.
А в чём разница между web и http сервисами? И когда следует использовать web а когда http сервис?
(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-запросов к системе управления контентом, данные передаются в соответствии с описанной схемой взаимодействия, УРЛ запроса здесь не меняется и является точкой входа.
Тоже давно использую SoapUI — никакие расширения даже близко не лежат.
Это решения разного уровня.
И он бесплатен.
И аналитиков/тестировщиков приучил.
(24) я в последнее время использую curl — рядом с ним вообще все остальное нервно курит в углу. Нужны тесты нагрузки? PHP + curl. Нужен юнит-тест — аналогичная связка (можно питон, bash, sh, … — сотни вещей).
(25) Я тоже планирую строить обращения к веб-сервису 1с с помошью curl — без линковки библиотек, а просто вызывая утилиту с соответствующими параметрами. Подскажите, пожалуйста, как можно передать логин/пароль пользователя 1с ?
(26) Ну как-тотак :
You can also include the password in the command, but then your password will be visible in bash history:
Скажите, Сергей, программа «Бумеранг» сейчас платная ?
(28) это не совсем «программа» — это расширение к браузеру Chrome. На сколько я знаю она бесплатна. Хотя, как я понял, есть и лицензия. Делает ее судя по фотке какой-то индус.
Неоднократно слыхал, что как более человечную альтернативу curl частенько юзают httpie (даже те, кто хорошо знает curl — так просто проще и продуктивнее).
Вот и Лустин ее в (16) упоминает. Есть в большинстве стандартных репозиториев. Учитывая, что она на питоне — можно и под виндой.
Хотя под виндой CLI не имеет такого сакрального смысла, как под linux — что-то гуевое заюзать еще проще и продуктивнее.
(30)
На первый взгляд штука хорошая.
А по поводу гуевого под линух, то смотря зачем. Если для автотестов, то лично мне проще создать на PHP что-то сcurl’ом (инсайд), чем что-то гуевое где-то искать.
а для firefox есть расширение ?
Спасибо!
Отличный инструмент! Раньше использовал curl, но с бумерангом гораздо проще передавать параметры со сложной структурой.
Очень наглядная отладка сервисов с большим количеством функций и при этом сразу наглядное документирование сервиса