Полезная ссылка: http://java-online.ru/web-service-wsdl.xhtml
Требуется разработать веб-службу, т.е. некоторую службу, доступную через сеть.
В данном случае приложение состоит из двух частей:
- Сервер - собственно веб-служба, предоставляющая некоторые функции
- Клиент - приложение, которое использует веб-службу
Дополнительные требования:
- Сервер и клиент должны быть написаны на разных языках
- Веб-служба принимает данные и возвращает результат
- В качестве параметров службы принимается объект класса
- Веб-сервис развёрнут на Azure
Мы будем выполнять все требования
При реализации веб-службы используется WSDL - web service definition language - язык описания веб-служб.
Это некоторое описание службы на XML подобном языке, благодаря которому клиент будет знать, как можно пользоваться службой.
Создадим веб-службу Универ.
У веб-службы будет функция, которая гвоорит, надо ли идти в универ в определённую дату.
Эта функция принимает на вход некоторую дату, а возвращает строку, в которой содержится ответ.
Ответ зависит от того, воскресение ли это, каникулы, праздник или обычный день.
Так уже реализуется требование №2.
При этом дату можно передавать не как просто три числа, а как экземпляр пользовательского класса.
Теперь реализуется требование №3.
Сервер напишем на PHP, а клиент на NodeJS. Реализовано требование №1.
Сервер развернём на Azure - реализовано требование №4.
Сервер будет написан на языке PHP.
Для реализации веб-службы будем использовать стандартный в php класс - SoapServer.
На сервере у нас 4 файла:
DateArg.php
- Описание класса DateArg. Класс для хранения дат.Univer.php
- Непосредственно класс веб-службы.server.php
- Скрипт веб-службы.Univer.wsdl
- WSDL описание веб-службы.
Так наш сервис будет доступен по ...../server.php
А его описание по ...../server.php?wsdl
Тут всё очень просто, маленький простейщий класс
Класс содержит один единственный метод ShouldIGoToUniver.
В нём происходи проверка, корректная ли дата, а дальше просто куча if.
Тут всё тоже очень просто.
Говорим, что мы создаём веб-службу классом SoapServer.
Говорим, что веб-служба - это класс Univer.
Говорим, что описание в Univer.wsdl
Собственно описание веб-службы.
Интересно, как же именно получить такой файл. Данный файл был сгененирован автоматически при помощи бесплатного сайта, который делает это онлайн.
Интересно, как сайт понял, что делать. В файлах DataArg и Univer есть специальные комментарии, называемые PHPDoc. Это комментарии в специальном формате, которые легко распознаются автоматически. Т.е. сайт просто прочитал комменты и сгенерировал WSDL.
Саму ссылку я потерял =(
Тут тоже всё довольно просто. клиент просит у юзера дату, подключается к веб-службе и выводит результат.
Для работы с веб-службой используем библиотеку node-soap (на php была стандартаня библиотека SoapServer. Наша веб-служба работает на Soap формате).
На клиенте у нас 2 файла:
DataArg.js
- описание класса DataArgindex.js
- собственно основная работа
Простейщее описание класса
Подключаем наш класс DataArg, библиотеку soap и уже знакомую нам библиотеку inquirer.
Будем использовать inquirer, чтобы взаимодействовать с пользователем.
- Описываем 3 вопроса пользователя: день, месяц, год.
- При помощи inquirer спрашиваем у пользователя день, месяц и год.
- Делаем
soap.createClientAsync(url)
для подключения к веб-службе. - Выполняет функцию
ShouldIGoToUniverAsync
- Выводим результат
Всё работает, как всегда, на promise.
- В папке с клиентом:
node client
- Вводим дату
- Готово
- В описании службы требуется ввести свой URL. Открываем Univer.wsdl\
- Делаем поиск с заменой, меняем
https://shagrisha.azurewebsites.net/wsdl-service/server.php
на свой URL к server.php - Теперь надо просто скопировать 4 файла из папки server на сервер.
- Готово
- Копируем файлы из папки client
- Надо установить все библиотеки
npm install
- В
client.js
обновляем константу URL (важно, в конце должно быть ?wsdl) - Готово
- Регистрируемся как студент на https://imagine.microsoft.com/
- http://portal.azure.com/
- Создать ресурс -> Интернет + мобильные приложения -> Веб-приложение
- Придумали имя, создаём группу ресурсов, выбираем ближайший сервер, создать. Можно также поставить галочку о добавлении на панель.
- Ждём первого развёртывания
- Развёртывание -> варианты развёртывания -> настроить -> выбираем удобный способ. Например, onedrive.
- Закидываем файлы сервера на
onedrive/приложения/azure/название-сайта
- Нажимаем кнопку синхронизировать (в меню Развёртывание -> варианты развёртывания)
- Ждём
- Готово