Всем хорошего времени суток. Давно не писал я, ибо решал задачи государственной важности и было не до мудрых нравоучений подрастающему поколению ))) Давайте рассмотрим, как создать сервис и дернуть его с помощью замечательного расширения для хрома "Бумеранг".
ВВЕДЕНИЕ
В последнее время я все чаще встречаюсь с ситуацией, когда клиенту требуется интеграция, и он хочет для этого создать веб-сервис в 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С.
Надеюсь, данная публикация будет полезна и прольет свет на тему веб-серсисов и доступа к ним, сделая тестирование сервисов простым и понятным делом.