Rubi Web Services Applications - soap4r
O que é sabão?
Simple Object Access Protocol (SOAP, todos escritos para o Simple Object Access Protocol) é uma especificação de protocolo para troca de dados.
SOAP é um protocolo simples baseado em XML que permite que os aplicativos para trocar informações sobre HTTP.
Simple Object Access Protocol, é uma especificação de protocolo para troca de dados, é leve, simples, baseado em XML (um subconjunto do abrigo Standard Generalized Markup Language) protocolo, que é projetado para intercâmbio estruturado na WEB e curar informações.
Por favor, veja mais sabão Tutorial: http://www.w3cschool.cc/soap/soap-tutorial.html .
instalação soap4r
Soap4r Hiroshi Nakamura desenvolvido pela implementação de SOAP para aplicações Ruby.
Soap4r Download: http://raa.ruby-lang.org/project/soap4r/ .
Nota: O seu ambiente de rubi pode já instalou o componente.
No Linux, você pode instalar o componente usando a gema, o seguinte comando:
$ gem install soap4r --include-dependencies
Se você estiver sob o ambiente de desenvolvimento janela, você precisa baixar o arquivo zip, e instalar, executando install.rb.
Serviço soap4r
Soap4r suporta dois tipos diferentes de serviços:
- Baseado em CGI / serviços FastCGI (SOAP :: RPC :: CGIStub)
- Serviço independente (SOAP :: RPC: StandaloneServer)
Este tutorial irá mostrar-lhe como construir um serviços SOAP independentes. Faça o seguinte:
Passo 1 - Herança SOAP :: RPC :: StandaloneServer
A fim de alcançar o seu próprio servidor separado, você precisa escrever uma nova classe que é SOAP :: RPC :: StandaloneServer sub-categorias:
class MyServer < SOAP::RPC::StandaloneServer ............... end
Nota: Se você quer escrever um FastCGI baseada em servidor, em seguida, você precisa estender SOAP :: RPC :: class CGIStub, o resto do programa permanecerá inalterada.
Segundo Passo - Definir métodos de processamento
Em seguida, definimos abordagem de serviços Web, que definem os dois métodos seguintes, uma é a soma de dois números, um é dividido pelo número de dois:
class MyServer < SOAP::RPC::StandaloneServer ............... # 处理方法 def add(a, b) return a + b end def div(a, b) return a / b end end
O terceiro passo - método de processamento de publicação
Em seguida, vamos adicionar métodos definidos no servidor, inicialize método é divulgado para conexões externas:
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, methodName, *paramArg) end end
Aqui está uma descrição de cada parâmetro:
parâmetros | descrição |
---|---|
recebedor | Objeto que contém o nome do método do método. Se você definir método de serviço na mesma classe, o parâmetro éauto. |
methodName | método RPC nome do pedido de invocação. |
paramArg | O nome do parâmetro e o modo de parâmetro |
Para entenderinouteforaparâmetros, considere os seguintes métodos de serviço, é necessário introduzir dois parâmetros: InParam e inoutParam, a função retorna três valores após a conclusão da implementação: retVal, inoutParam, outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam end
Publicação de chamada da seguinte forma:
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
A quarta etapa - serviço aberto
Finalmente, instanciar a classe derivada, e chamar o método start para iniciar o serviço:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
O que se segue é uma descrição do parâmetro de solicitação:
parâmetros | descrição |
---|---|
ServerName | nome do serviço, você pode levar seu favorito |
urn: ruby: ServiceName | Aquiurn: ruby é fixo, mas você pode tomar umServiceNameexclusivo para o seu serviço |
hostname | Especifique o nome do host |
porto | porta de serviço web |
Exemplos
Em seguida nós através dos passos acima para criar um serviço independente:
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
Depois de executar o programa acima, iniciar um ouvinte na porta 8080 dos serviços locais, e expõe dois métodos: Adicionar e div.
Você pode então executar o plano de fundo desses serviços:
$ ruby MyServer.rb&
cliente soap4r
ruby usar SOAP :: RPC :: cliente da classe do driver desenvolvimento SOAP. Próximo olhamos em detalhe usando SOAP :: RPC :: class driver.
serviço SOAP chamada requer as seguintes informações:
- SABÃO Serviço de endereço de URL (SABÃO Endpoint URL)
- Namespace (Namespace Método URI) método de serviço
- Nome do método de serviço e de parâmetros
Em seguida, damos um passo para criar um cliente SOAP para chamar o método de SOAP acima: adicione, div:
Primeiro Passo - Criar instância SABÃO driver
Podemos chamá-lo de um novo método para instanciar SOAP :: RPC :: class Motorista, como segue:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
O seguinte é uma descrição dos parâmetros:
parâmetros | descrição |
---|---|
endPoint | serviço SOAP conexão endereço URL |
nameSpace | Namespace para SOAP :: RPC :: Motorista objeto tudo RPC. |
soapAction | Para valores de campo de cabeçalho SOAPAction HTTP. Se a cadeia é "" o padrão énulo |
Etapa dois - adicionar método de serviço
SOAP :: RPC :: Motorista para adicionar método de serviço SOAP, podemos chamar o método a seguir a título de exemplo SOAP :: RPC :: motorista:
driver.add_method(name, *paramArg)
O seguinte é uma descrição dos parâmetros:
parâmetros | descrição |
---|---|
nome | O nome do método dos serviços web remotos |
paramArg | Parâmetro para especificar o programa remoto |
O terceiro passo - chamar serviços SOAP
Finalmente, podemos usar SOAP :: RPC :: instância do controlador para invocar serviços SOAP:
result = driver.serviceMethod(paramArg...)
Os serviços reais SABÃO nome do método ServiceMethod, paramArg para lista de parâmetros do método.
Exemplos
Com base nas etapas acima, podemos escrever a seguinte cliente 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
Acima de nós simplesmente introduzir serviços Web do Ruby. Se você quiser saber mais, você pode visualizar o documento oficial: o rubi de Web Services