Дай дернуть-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С.
Надеюсь, данная публикация будет полезна и прольет свет на тему веб-серсисов и доступа к ним, сделая тестирование сервисов простым и понятным делом.

