Учебники

Веб-сервисы с Ruby — SOAP4R

Простой протокол доступа к объектам (SOAP) — это кроссплатформенный и независимый от языка протокол RPC, основанный на XML и, как правило (но не обязательно) HTTP.

Он использует XML для кодирования информации, которая делает удаленный вызов процедуры, и HTTP для передачи этой информации по сети от клиентов к серверам и наоборот.

SOAP имеет ряд преимуществ перед другими технологиями, такими как COM, CORBA и т. Д., Например, его относительно дешевые затраты на развертывание и отладку, его расширяемость и простота использования, а также наличие нескольких реализаций для разных языков и платформ.

Пожалуйста, обратитесь к нашему простому учебнику SOAP, чтобы понять его в деталях.

Эта глава знакомит вас с реализацией SOAP для Ruby (SOAP4R). Это базовый учебник, поэтому, если вам нужны глубокие подробности, вам нужно будет обратиться к другим ресурсам.

Установка SOAP4R

SOAP4R — это реализация SOAP для Ruby, разработанная Хироши Накамурой, которую можно загрузить с:

ПРИМЕЧАНИЕ. — Существует большая вероятность того, что вы уже установили этот компонент.

Download SOAP

Если вам известна утилита gem, вы можете использовать следующую команду для установки SOAP4R и связанных пакетов.

$ gem install soap4r --include-dependencies

Если вы работаете в Windows, вам нужно скачать заархивированный файл из вышеуказанного места и установить его, используя стандартный метод установки, запустив ruby install.rb .

Написание серверов SOAP4R

SOAP4R поддерживает два разных типа серверов —

  • На основе CGI / FastCGI (SOAP :: RPC :: CGIStub)
  • Автономный (SOAP :: RPC: StandaloneServer)

В этой главе подробно описывается создание автономного сервера. Следующие шаги участвуют в написании сервера SOAP.

Шаг 1 — Унаследовать класс SOAP :: RPC :: StandaloneServer

Чтобы реализовать свой собственный автономный сервер, вам нужно написать новый класс, который будет дочерним от SOAP :: StandaloneServer, следующим образом:

class MyServer < SOAP::RPC::StandaloneServer
  ...............
end

ПРИМЕЧАНИЕ. — Если вы хотите написать сервер на основе FastCGI, вам нужно принять SOAP :: RPC :: CGIStub в качестве родительского класса, остальная часть процедуры останется прежней.

Шаг 2 — Определите методы обработчика

Второй шаг — написать методы Web-сервисов, которые вы хотели бы представить внешнему миру.

Они могут быть написаны как простые методы Ruby. Например, давайте напишем два метода, чтобы добавить два числа и разделить два числа —

class MyServer < SOAP::RPC::StandaloneServer
   ...............

   # Handler methods
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

Шаг 3 — Предоставить методы обработчика

Следующим шагом является добавление определенных методов на наш сервер. Метод initialize используется для предоставления методов обслуживания одним из двух следующих методов:

class MyServer < SOAP::RPC::StandaloneServer
   def initialize(*args)
      add_method(receiver, methodName, *paramArg)
   end
end

Вот описание параметров —

Sr.No. Параметр и описание
1

получатель

Объект, который содержит метод methodName. Вы определяете сервисные методы в том же классе, что и метод methodDef, этот параметр является self .

2

имяМетода

Имя метода, который вызывается из-за запроса RPC.

3

paramArg

Определяет, когда дано, имена параметров и режимы параметров.

получатель

Объект, который содержит метод methodName. Вы определяете сервисные методы в том же классе, что и метод methodDef, этот параметр является self .

имяМетода

Имя метода, который вызывается из-за запроса RPC.

paramArg

Определяет, когда дано, имена параметров и режимы параметров.

Чтобы понять использование параметров inout или out , рассмотрим следующий метод обслуживания, который принимает два параметра (inParam и inoutParam), возвращает одно нормальное возвращаемое значение (retVal) и два дополнительных параметра: inoutParam и outParam

def aMeth(inParam, inoutParam)
   retVal = inParam + inoutParam
   outParam = inParam . inoutParam
   inoutParam = inParam * inoutParam
   return retVal, inoutParam, outParam
end

Теперь мы можем раскрыть этот метод следующим образом:

add_method(self, 'aMeth', [
   %w(in inParam),
   %w(inout inoutParam),
   %w(out outParam),
   %w(retval return)
])

Шаг 4 — Запустите сервер

Последний шаг — запустить ваш сервер, создав один экземпляр производного класса и вызвав метод start .

myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)

myServer.start

Вот описание обязательных параметров —

Sr.No. Параметр и описание
1

Название сервера

Имя сервера, вы можете дать то, что вам нравится больше всего.

2

Урна: рубин: ServiceName

Здесь urn: ruby является константой, но вы можете дать уникальное имя ServiceName для этого сервера.

3

имя хоста

Указывает имя хоста, на котором будет прослушивать этот сервер.

4

порт

Доступный номер порта, который будет использоваться для веб-службы.

Название сервера

Имя сервера, вы можете дать то, что вам нравится больше всего.

Урна: рубин: ServiceName

Здесь urn: ruby является константой, но вы можете дать уникальное имя ServiceName для этого сервера.

имя хоста

Указывает имя хоста, на котором будет прослушивать этот сервер.

порт

Доступный номер порта, который будет использоваться для веб-службы.

пример

Теперь, используя описанные выше шаги, давайте напишем один автономный сервер —

require "soap/rpc/standaloneserver"

begin
   class MyServer < SOAP::RPC::StandaloneServer

      # Expose our services
      def initialize(*args)
         add_method(self, 'add', 'a', 'b')
         add_method(self, 'div', 'a', 'b')
      end

      # Handler methods
      def add(a, b)
         return a + b
      end
      def div(a, b) 
         return a / b 
      end
end
   server = MyServer.new("MyServer", 
            'urn:ruby:calculation', 'localhost', 8080)
   trap('INT){
      server.shutdown
   }
   server.start
rescue => err
   puts err.message
end

При выполнении это серверное приложение запускает автономный сервер SOAP на локальном хосте и прослушивает запросы на порте 8080. Он предоставляет один метод обслуживания, add и div , который принимает два параметра и возвращает результат.

Теперь вы можете запустить этот сервер в фоновом режиме следующим образом:

$ ruby MyServer.rb&

Написание клиентов SOAP4R

Класс SOAP :: RPC :: Driver обеспечивает поддержку для написания клиентских приложений SOAP. Эта глава описывает этот класс и демонстрирует его использование на основе приложения.

Ниже приведена минимальная информация, необходимая для вызова службы SOAP.

  • URL-адрес службы SOAP (URL-адрес конечной точки SOAP).
  • Пространство имен методов службы (URI пространства имен метода).
  • Наименования сервисных методов и их параметры.

Теперь мы напишем клиент SOAP, который будет вызывать методы службы, определенные в приведенном выше примере, с именами add и div .

Вот основные шаги для создания клиента SOAP.

Шаг 1. Создание экземпляра драйвера SOAP

Мы создаем экземпляр SOAP :: RPC :: Driver , вызывая его новый метод следующим образом:

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)

Вот описание обязательных параметров —

Sr.No. Параметр и описание
1

ENDPOINT

URL-адрес сервера SOAP для подключения.

2

NAMESPACE

Пространство имен, используемое для всех RPC, созданных с помощью этого объекта SOAP :: RPC :: Driver.

3

SOAPAction

Значение для поля SOAPAction заголовка HTTP. Если ноль, то по умолчанию используется пустая строка «».

ENDPOINT

URL-адрес сервера SOAP для подключения.

NAMESPACE

Пространство имен, используемое для всех RPC, созданных с помощью этого объекта SOAP :: RPC :: Driver.

SOAPAction

Значение для поля SOAPAction заголовка HTTP. Если ноль, то по умолчанию используется пустая строка «».

Шаг 2 — Добавить методы обслуживания

Чтобы добавить метод службы SOAP в SOAP :: RPC :: Driver, мы можем вызвать следующий метод, используя экземпляр SOAP :: RPC :: Driver

driver.add_method(name, *paramArg)

Вот описание параметров —

Sr.No. Параметр и описание
1

название

Имя метода удаленного веб-сервиса.

2

paramArg

Определяет имена параметров удаленных процедур.

название

Имя метода удаленного веб-сервиса.

paramArg

Определяет имена параметров удаленных процедур.

Шаг 3 — вызвать сервис SOAP

Последний шаг заключается в выставлении счета-фактуры на службу SOAP с использованием экземпляра SOAP :: RPC :: Driver следующим образом:

result = driver.serviceMethod(paramArg...)

Здесь serviceMethod — это фактический метод веб-службы, а paramArg … — это параметры списка, которые необходимо передать в метод службы.

пример

Основываясь на вышеуказанных шагах, мы напишем клиент SOAP следующим образом:

#!/usr/bin/ruby -w

require 'soap/rpc/driver'

NAMESPACE = 'urn:ruby:calculation'
URL = 'http://localhost:8080/'

begin
   driver = SOAP::RPC::Driver.new(URL, NAMESPACE)
   
   # Add remote sevice methods
   driver.add_method('add', 'a', 'b')

   # Call remote service methods
   puts driver.add(20, 30)
rescue => err
   puts err.message
end

Дальнейшие чтения

Я объяснил вам только самые основные понятия веб-сервисов с Ruby. Если вы хотите углубиться в детали, перейдите по следующей ссылке, чтобы узнать больше о веб-сервисах с Ruby .