Client SOAP

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


SOAP e’ un protocollo che permette di realizzare servizi accessibili da remoto, basato su XML e HTTP, e usabile quindi da quasi ogni piattaforma e linguaggio. Ruby ha avuto per molto tempo un’implementazione SOAP, detta SOAP4R, che e’ stata integrata nella distribuzione dell’interprete base dalla versione 1.8.1. Usando SOAP4R si possono realizzare client e server SOAP, manipolare file WSDL, e grazie ai binding con openssl usare servizi sicuri con HTTPS.

Scrivere un client SOAP in ruby e’ davvero semplice. Un buon posto per cercare servizi gratuiti e disponibili a tutti e’ xmethods.org.

Vediamo un esempio:
 require 'soap/rpc/driver'
 server = "http://services.xmethods.com/soap" 
 namespace = "urn:xmethods-delayed-quotes" 
 client = SOAP::RPC::Driver.new( server, namespace )
 client.add_method( "getQuote", "symbol" )
 azioni = ["RHAT", "IBM", "MSFT", "AMR", "LNUX", "NT", "TSG"]

 puts "Prezzi Azioni" 
 puts "================" 

 azioni.sort.each do |azione|
   printf("%6s %8.3f\n", azione, client.getQuote(azione))
 end

Questo semplice script ci permette di conoscere i valori di mercato di alcune societa’. Come funziona? Semplice, un Driver), cioe’ un meccanismo che ci permette di accedere al servizio, viene creato usando un url ed un identificatore univoco ( urn ).

Subito dopo aggiungiamo all’oggetto un metodo, disponibile sul server, che rappresenta la richiesta che vogliamo effettuare. Per aggiungere il metodo dobbiamo usare il suo nome (il primo parametro) ed il tipo di parametro che noi dovremo passargli (symbol in questo caso, in sostanza e’ una stringa). Queste sono tutte informazioni che deve fornire chi crea il servizio, non dovete inventarle :)

A questo punto non ci rimane che richiamare questo metodo con il parametro che vogliamo, in questo caso lo chiamiamo un po’ di volte con gli identificatri delle varie societa’. Infine, ordiniamo il tutto e stampiamo a schermo:
 Prezzi Azioni
 ================
   AMR   15.360
   IBM   96.250
  LNUX    3.748
  MSFT   26.460
    NT    7.660
  RHAT   18.490
   TSG   22.500
Un’ultima nota: usando un WSDL, tutto questo puo’ essere automatizzato (vedere Client SOAP da WSDL per maggiori info)

Ecco un altro piccolo esempio. Sempre dal sito http://www.xmethods.net recuperiamo il servizio Romulan Numbers XLII che converte i numeri decimale in numeri romani e viceversa (se il nome del servizio non viene visualizzato nella lista presenta sulla home page cliccate su FULL LIST). Cliccando sul nome del servizio si accede alla pagina dove sono inserire alcune informazioni riquardanti il servizio stesso, in particolare ci interessa recupera i nomi dei metodi da invocare. Cliccando su View RPC Profile vi apre una finestra che visualizza le informazioni riquardanti i metodi messi a disposizione. Il servizio Romulan Numbers XLII mette a disposizione due metodi IntToRoman e RomanToInt.

Vediamo come utilizzare le informazioni riportate: in particolaere interessa conoscere il nome del metodo, l’indirizzo URL del servizio, il namespace e i parametri di ingresso e di uscita. Ecco l’esempio esplicativo di come utilizzare i dati forniti dalla prima tabella, per la seconda il procedimento √® analogo.

 require 'soap/rpc/driver'

 # "Endpoint URL" 
 server = "http://www.ebob42.com/cgi-bin/Romulan.exe/soap/IRoman" 
 # "Method Namespace URI" 
 namespace = "urn:Roman-IRoman" 
 client = SOAP::RPC::Driver.new(server, namespace)
 # "Method Name" 
 client.add_method("IntToRoman", "int")

 puts client.IntToRoman(19)
Updated on February 21, 2007 17:44 by Ruby Fan (83.187.204.118)