Ruby를 사용한 웹 서비스-SOAP4R

SOAP 란 무엇입니까?

SOAP (Simple Object Access Protocol)는 XML과 일반적으로 (반드시 그런 것은 아님) HTTP를 기반으로하는 크로스 플랫폼 및 언어 독립적 RPC 프로토콜입니다.

XML을 사용하여 원격 프로 시저 호출을 만드는 정보를 인코딩하고 HTTP를 사용하여 네트워크를 통해 해당 정보를 클라이언트에서 서버로 또는 그 반대로 전송합니다.

SOAP는 COM, CORBA 등과 같은 다른 기술에 비해 몇 가지 장점이 있습니다. 예를 들어 비교적 저렴한 배포 및 디버깅 비용, 확장 성 및 사용 용이성, 다양한 언어 및 플랫폼에 대한 여러 구현의 존재 등이 있습니다.

자세한 내용은 간단한 튜토리얼 SOAP 를 참조하십시오 .

이 장에서는 Ruby (SOAP4R)에 대한 SOAP 구현에 익숙해집니다. 이것은 기본 자습서이므로 자세한 정보가 필요한 경우 다른 리소스를 참조해야합니다.

SOAP4R 설치

SOAP4R은 나카무라 히로시 (Hiroshi Nakamura)가 개발 한 Ruby 용 SOAP 구현이며 다음에서 다운로드 할 수 있습니다.

NOTE −이 구성 요소를 이미 설치했을 가능성이 큽니다.

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

NOTE− FastCGI 기반 서버를 작성하려면 SOAP :: RPC :: CGIStub 을 부모 클래스로 가져와야 하며 나머지 절차는 동일하게 유지됩니다.

2 단계-처리기 메서드 정의

두 번째 단계는 외부 세계에 노출하려는 웹 서비스 메서드를 작성하는 것입니다.

간단한 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 단계-처리기 메서드 노출

다음 단계는 정의 된 메소드를 서버에 추가하는 것입니다. 초기화 방법은 다음의 두 가지 방법 중 하나의 서비스 방법을 노출하기 위해 사용된다 -

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

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

receiver

methodName 메서드를 포함하는 개체입니다. methodDef 메소드와 동일한 클래스에서 서비스 메소드를 정의합니다 . 이 매개 변수는 self 입니다.

2

methodName

RPC 요청으로 인해 호출되는 메서드의 이름입니다.

paramArg

주어진 경우 매개 변수 이름과 매개 변수 모드를 지정합니다.

inout 또는 out 매개 변수 의 사용법을 이해하려면 두 개의 매개 변수 (inParam 및 inoutParam)를 사용하고 하나의 일반 반환 값 (retVal)과 두 개의 추가 매개 변수를 반환하는 다음 서비스 메서드를 고려하십시오 : inoutParamoutParam

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. 아니. 매개 변수 및 설명
1

ServerName

서버 이름, 가장 좋아하는 것을 줄 수 있습니다.

2

urn:ruby:ServiceName

여기서 urn : ruby 는 일정하지만이 서버에 고유 한 ServiceName 이름을 지정할 수 있습니다.

hostname

이 서버가 수신 할 호스트 이름을 지정합니다.

4

port

웹 서비스에 사용할 수있는 포트 번호입니다.

이제 위의 단계를 사용하여 하나의 독립형 서버를 작성하겠습니다.

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

실행되면이 서버 응용 프로그램은 localhost 에서 독립 실행 형 SOAP 서버를 시작하고 포트 8080 에서 요청을 수신합니다 . 두 개의 매개 변수를 사용하고 결과를 반환하는 하나의 서비스 메서드 adddiv를 노출합니다 .

이제 다음과 같이 백그라운드에서이 서버를 실행할 수 있습니다.

$ ruby MyServer.rb&

SOAP4R 클라이언트 작성

SOAP :: RPC : 드라이버 클래스는 SOAP 클라이언트 응용 프로그램을 작성하기위한 지원을 제공합니다. 이 장에서는이 클래스를 설명하고 응용 프로그램을 기반으로 그 사용법을 보여줍니다.

다음은 SOAP 서비스를 호출하는 데 필요한 최소한의 정보입니다.

  • SOAP 서비스의 URL (SOAP 끝점 URL)입니다.
  • 서비스 메서드의 네임 스페이스 (Method Namespace URI)
  • 서비스 메소드 및 해당 매개 변수의 이름.

이제 위의 예에서 정의한 adddiv 라는 서비스 메서드를 호출하는 SOAP 클라이언트를 작성합니다 .

다음은 SOAP 클라이언트를 만드는 주요 단계입니다.

1 단계-SOAP 드라이버 인스턴스 만들기

다음과 같이 새 메서드를 호출하여 SOAP :: RPC :: Driver 의 인스턴스를 만듭니다.

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

다음은 필수 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

endPoint

연결할 SOAP 서버의 URL입니다.

2

nameSpace

이 SOAP :: RPC :: Driver 개체로 수행 된 모든 RPC에 사용할 네임 스페이스입니다.

soapAction

HTTP 헤더의 SOAPAction 필드에 대한 값입니다. nil이면 기본값은 빈 문자열 ""입니다.

2 단계-서비스 방법 추가

SOAP :: RPC :: Driver에 SOAP 서비스 메서드를 추가하려면 SOAP :: RPC :: Driver 인스턴스를 사용하여 다음 메서드를 호출 할 수 있습니다.

driver.add_method(name, *paramArg)

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

name

원격 웹 서비스 방법의 이름입니다.

2

paramArg

원격 프로 시저의 매개 변수 이름을 지정합니다.

3 단계-SOAP 서비스 호출

마지막 단계는 다음과 같이 SOAP :: RPC :: Driver 인스턴스를 사용하여 SOAP 서비스를 청구하는 것입니다.

result = driver.serviceMethod(paramArg...)

여기서 serviceMethod 는 실제 웹 서비스 메소드이고 paramArg ... 는 서비스 메소드를 전달하는 데 필요한 목록 매개 변수입니다.

Example

위의 단계를 기반으로 다음과 같이 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를 사용한 웹 서비스 에 대한 자세한 내용을 찾을 수 있습니다 .