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)과 두 개의 추가 매개 변수를 반환하는 다음 서비스 메서드를 고려하십시오 : 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. 아니. | 매개 변수 및 설명 |
---|---|
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 에서 요청을 수신합니다 . 두 개의 매개 변수를 사용하고 결과를 반환하는 하나의 서비스 메서드 add 및 div를 노출합니다 .
이제 다음과 같이 백그라운드에서이 서버를 실행할 수 있습니다.
$ ruby MyServer.rb&
SOAP4R 클라이언트 작성
SOAP :: RPC : 드라이버 클래스는 SOAP 클라이언트 응용 프로그램을 작성하기위한 지원을 제공합니다. 이 장에서는이 클래스를 설명하고 응용 프로그램을 기반으로 그 사용법을 보여줍니다.
다음은 SOAP 서비스를 호출하는 데 필요한 최소한의 정보입니다.
- SOAP 서비스의 URL (SOAP 끝점 URL)입니다.
- 서비스 메서드의 네임 스페이스 (Method Namespace URI)
- 서비스 메소드 및 해당 매개 변수의 이름.
이제 위의 예에서 정의한 add 및 div 라는 서비스 메서드를 호출하는 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를 사용한 웹 서비스 에 대한 자세한 내용을 찾을 수 있습니다 .