Skip to content

An example of using php web-service (with wsdl) in nodejs

Notifications You must be signed in to change notification settings

ShGKme/wsdl-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Разработка распределённого приложения, использующего технологию веб-служб

Полезная ссылка: http://java-online.ru/web-service-wsdl.xhtml

Задача

Требуется разработать веб-службу, т.е. некоторую службу, доступную через сеть.

В данном случае приложение состоит из двух частей:

  • Сервер - собственно веб-служба, предоставляющая некоторые функции
  • Клиент - приложение, которое использует веб-службу

Дополнительные требования:

  1. Сервер и клиент должны быть написаны на разных языках
  2. Веб-служба принимает данные и возвращает результат
  3. В качестве параметров службы принимается объект класса
  4. Веб-сервис развёрнут на 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

DateArg.php

Тут всё очень просто, маленький простейщий класс

Univer.php

Класс содержит один единственный метод ShouldIGoToUniver.

В нём происходи проверка, корректная ли дата, а дальше просто куча if.

server.php

Тут всё тоже очень просто.

Говорим, что мы создаём веб-службу классом SoapServer.
Говорим, что веб-служба - это класс Univer.
Говорим, что описание в Univer.wsdl

Univer.wsdl

Собственно описание веб-службы.

Интересно, как же именно получить такой файл. Данный файл был сгененирован автоматически при помощи бесплатного сайта, который делает это онлайн.

Интересно, как сайт понял, что делать. В файлах DataArg и Univer есть специальные комментарии, называемые PHPDoc. Это комментарии в специальном формате, которые легко распознаются автоматически. Т.е. сайт просто прочитал комменты и сгенерировал WSDL.

Саму ссылку я потерял =(

Клиент

Тут тоже всё довольно просто. клиент просит у юзера дату, подключается к веб-службе и выводит результат.

Для работы с веб-службой используем библиотеку node-soap (на php была стандартаня библиотека SoapServer. Наша веб-служба работает на Soap формате).

На клиенте у нас 2 файла:

  • DataArg.js - описание класса DataArg
  • index.js - собственно основная работа

DataArg

Простейщее описание класса

Index

Подключаем наш класс DataArg, библиотеку soap и уже знакомую нам библиотеку inquirer.

Будем использовать inquirer, чтобы взаимодействовать с пользователем.

  1. Описываем 3 вопроса пользователя: день, месяц, год.
  2. При помощи inquirer спрашиваем у пользователя день, месяц и год.
  3. Делаем soap.createClientAsync(url) для подключения к веб-службе.
  4. Выполняет функцию ShouldIGoToUniverAsync
  5. Выводим результат

Всё работает, как всегда, на promise.

Использование приложения

  1. В папке с клиентом: node client
  2. Вводим дату
  3. Готово

Развёртывание сервера

  1. В описании службы требуется ввести свой URL. Открываем Univer.wsdl\
  2. Делаем поиск с заменой, меняем https://shagrisha.azurewebsites.net/wsdl-service/server.php на свой URL к server.php
  3. Теперь надо просто скопировать 4 файла из папки server на сервер.
  4. Готово

Развёртывание клиента

  1. Копируем файлы из папки client
  2. Надо установить все библиотеки npm install
  3. В client.js обновляем константу URL (важно, в конце должно быть ?wsdl)
  4. Готово

Развёртывание на Azure

  1. Регистрируемся как студент на https://imagine.microsoft.com/
  2. http://portal.azure.com/
  3. Создать ресурс -> Интернет + мобильные приложения -> Веб-приложение
  4. Придумали имя, создаём группу ресурсов, выбираем ближайший сервер, создать. Можно также поставить галочку о добавлении на панель.
  5. Ждём первого развёртывания
  6. Развёртывание -> варианты развёртывания -> настроить -> выбираем удобный способ. Например, onedrive.
  7. Закидываем файлы сервера на onedrive/приложения/azure/название-сайта
  8. Нажимаем кнопку синхронизировать (в меню Развёртывание -> варианты развёртывания)
  9. Ждём
  10. Готово

About

An example of using php web-service (with wsdl) in nodejs

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published