Приложение веб-сервиса на Ruby - SOAP4R
Что такое SOAP?
Simple Object Access Protocol (SOAP) — это спецификация протокола для обмена данными.
SOAP — это простой протокол на основе XML, который позволяет приложениям обмениваться информацией по HTTP.
Simple Object Access Protocol — это спецификация протокола для обмена данными. Это легковесный, простой протокол на основе XML (подмножество стандартного обобщённого языка разметки), предназначенный для обмена структурированной и фиксированной информацией в Интернете.
Дополнительные руководства по SOAP см. здесь:http://www.w3cschool.cc/soap/soap-tutorial.html。
Установка SOAP4R
SOAP4R был разработан и реализован Хироси Накамура для приложений SOAP на Ruby.
Адрес загрузки SOAP4R:http://raa.ruby-lang.org/project/soap4r/。
Примечание:В вашей среде Ruby этот компонент может быть уже установлен.
В Linux вы также можете использовать gem для установки этого компонента. Команда выглядит так:
Если вы разрабатываете в среде Windows, вам нужно скачать zip-архив и установить его, выполнив install.rb.
Сервис SOAP4R
SOAP4R поддерживает два различных типа сервисов:
- Сервис на основе CGI/FastCGI (SOAP::RPC::CGIStub)
- Автономный сервис (SOAP::RPC:StandaloneServer)
В этом руководстве будет рассказано, как настроить автономный сервис SOAP. Шаги следующие:
Шаг 1 — Наследование SOAP::RPC::StandaloneServer
Чтобы реализовать собственный автономный сервер, вам нужно написать новый класс, являющийся подклассом SOAP::RPC::StandaloneServer:
Примечание:Если вы хотите написать сервер на основе FastCGI, вам нужно унаследоваться от класса SOAP::RPC::CGIStub; остальная часть программы останется без изменений.
Шаг 2 - Определение методов обработки
Далее мы определяем методы веб-сервиса. Ниже мы определяем два метода: один складывает два числа, а другой делит два числа:
Шаг 3 - Публикация методов обработки
Далее добавьте методы, которые мы определили на сервере. Метод initialize является публичным и используется для внешних подключений:
Ниже приводится объяснение каждого параметра:
| Параметр | Описание |
|---|---|
| receiver | Объект, содержащий метод с указанным именем метода. Если вы определите сервисный метод в том же классе, этот параметр равенself。 |
| methodName | Имя метода, вызываемого RPC-запросом. |
| paramArg | Имена параметров и режимы параметров |
Чтобы понять, что такое параметрыinoutиout, рассмотрите следующий сервисный метод, в котором требуются два входных параметра: inParam и inoutParam. После завершения выполнения функции он возвращает три значения: retVal, inoutParam и outParam:
Публичный метод вызова выглядит так:
Шаг 4 - Запуск сервиса
Наконец, мы создаём экземпляр производного класса и вызываем метод start, чтобы запустить сервис:
Ниже приведено объяснение параметров запроса:
| Параметр | Описание |
|---|---|
| ServerName | Имя сервиса, вы можете выбрать любое на свой вкус |
| urn:ruby:ServiceName | Здесь urn:ruby— фиксированная часть, но вы можете дать своему сервису уникальноеServiceName |
| hostname | Укажите имя хоста |
| port | Порт веб-сервиса |
Пример
Далее мы создаём автономный сервис, используя вышеописанные шаги:
Пример
После запуска вышеуказанной программы запускается локальная служба, прослушивающая порт 8080, и предоставляются два метода: add и div.
Вы можете запустить вышеуказанную службу в фоновом режиме:
$ ruby MyServer.rb &
Клиент SOAP4R
В Ruby для разработки SOAP-клиентов используется класс SOAP::RPC::Driver. Далее подробно рассмотрим использование класса SOAP::RPC::Driver.
Для вызова службы SOAP требуется следующая информация:
- URL-адрес службы SOAP (URL конечной точки SOAP)
- Пространство имен метода сервиса (Method Namespace URI)
- Имя метода сервиса и информация о параметрах
Далее мы шаг за шагом создадим SOAP-клиент для вызова вышеуказанных SOAP-методов: add и div:
Шаг 1 — Создание экземпляра SOAP-драйвера
Мы можем создать экземпляр класса SOAP::RPC::Driver, чтобы вызвать его метод new, как показано ниже:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
Ниже приведено описание параметров:
| Параметр | Описание |
|---|---|
| endPoint | URL-адрес для подключения к SOAP-сервису |
| nameSpace | Пространство имен, используемое для всех RPC-вызовов объекта SOAP::RPC::Driver. |
| soapAction | Значение поля SOAPAction, используемое в заголовке HTTP. Если это строка "", значение по умолчанию —nil |
Шаг 2 — Добавление методов сервиса
Чтобы добавить методы SOAP-сервиса в SOAP::RPC::Driver, можно вызвать следующие методы через экземпляр SOAP::RPC::Driver:
driver.add_method(name, *paramArg)
Ниже приведено объяснение параметров:
| Параметр | Описание |
|---|---|
| name | Имя метода удаленного веб-сервиса |
| paramArg | Укажите параметры удаленной программы |
Шаг 3 - Вызов SOAP-сервиса
Наконец, мы можем использовать экземпляр SOAP::RPC::Driver для вызова SOAP-сервиса:
result = driver.serviceMethod(paramArg...)
serviceMethod — это фактическое имя метода SOAP-сервиса, а paramArg — список параметров метода.
Пример
На основе вышеописанных шагов мы можем написать следующий SOAP-клиент:
Пример
Выше мы лишь кратко познакомились с веб-сервисом Ruby. Если вы хотите узнать больше, обратитесь к официальной документации:Веб-сервис Ruby
Другие расширения