SOAP Web Service con PHP

13 aprile 2018

Il protocollo SOAP è utilizzato per scambiare informazioni tra software. Nasce come acronimo di Simple Object Access Protocol, poi rimosso dalla versione 1.2 dal W3C. Un messaggio scambiato tra client e server attraverso SOAP è basato su XML, come possiamo vedere dal seguente esempio:

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
 <env:Header>
  <m:reservation xmlns:m="http://travelcompany.example.org/reservation"
          env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
           env:mustUnderstand="true">
   <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:reference>
   <m:dateAndTime>2001-11-29T13:20:00.000-05:00</m:dateAndTime>
  </m:reservation>
  <n:passenger xmlns:n="http://mycompany.example.com/employees"
          env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
           env:mustUnderstand="true">
   <n:name>Åke Jógvan Øyvind</n:name>
  </n:passenger>
 </env:Header>
 <env:Body>
  <p:itinerary
    xmlns:p="http://travelcompany.example.org/reservation/travel">
   <p:departure>
     <p:departing>New York</p:departing>
     <p:arriving>Los Angeles</p:arriving>
     <p:departureDate>2001-12-14</p:departureDate>
     <p:departureTime>late afternoon</p:departureTime>
     <p:seatPreference>aisle</p:seatPreference>
   </p:departure>
   <p:return>
     <p:departing>Los Angeles</p:departing>
     <p:arriving>New York</p:arriving>
     <p:departureDate>2001-12-20</p:departureDate>
     <p:departureTime>mid-morning</p:departureTime>
     <p:seatPreference/>
   </p:return>
  </p:itinerary>
  <q:lodging
   xmlns:q="http://travelcompany.example.org/reservation/hotels">
   <q:preference>none</q:preference>
  </q:lodging>
 </env:Body>
</env:Envelope>

Possiamo notare che il messaggio è costituito da un body e ad un header wrappati all'interno di un tag env:Envelope. L'envelope è il nodo root di ogni messaggio SOAP. L'header è opzionale e, se usato, generalmente contiene informazioni aggiuntive utili per il destinatario. Il body, invece, contiene le informazioni necessarie per la comunicazione.

Nel caso del nostro esempio, essendo una prenotazione di un viaggio, il body contiene le informazioni sull'itinerario del viaggiatore mentre l'header altre informazioni come i dati del viaggiatore.

L'esempio è stato prelevato dalla documentazione ufficiale del W3C.

Descrizione dei servizi attraverso WSDL

Ogni Web Service che utilizza il protocollo SOAP mette a disposizione un URL pubblico che contiene la descrizione dei servizi disponibili. Tale interfaccia è basata sul protocollo WSDL:

<?xml version="1.0"?>
<definitions name="StockQuote"

targetNamespace="http://example.com/stockquote.wsdl"
          xmlns:tns="http://example.com/stockquote.wsdl"
          xmlns:xsd1="http://example.com/stockquote.xsd"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns="http://schemas.xmlsoap.org/wsdl/">

    <types>
       <schema targetNamespace="http://example.com/stockquote.xsd"
              xmlns="http://www.w3.org/2000/10/XMLSchema">
           <element name="TradePriceRequest">
              <complexType>
                  <all>
                      <element name="tickerSymbol" type="string"/>
                  </all>
              </complexType>
           </element>
           <element name="TradePrice">
              <complexType>
                  <all>
                      <element name="price" type="float"/>
                  </all>
              </complexType>
           </element>
       </schema>
    </types>

    <message name="GetLastTradePriceInput">
        <part name="body" element="xsd1:TradePriceRequest"/>
    </message>

    <message name="GetLastTradePriceOutput">
        <part name="body" element="xsd1:TradePrice"/>
    </message>

    <portType name="StockQuotePortType">
        <operation name="GetLastTradePrice">
           <input message="tns:GetLastTradePriceInput"/>
           <output message="tns:GetLastTradePriceOutput"/>
        </operation>
    </portType>

    <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetLastTradePrice">
           <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
           <input>
               <soap:body use="literal"/>
           </input>
           <output>
               <soap:body use="literal"/>
           </output>
        </operation>
    </binding>

    <service name="StockQuoteService">
        <documentation>My first service</documentation>
        <port name="StockQuotePort" binding="tns:StockQuoteBinding">
           <soap:address location="http://example.com/stockquote"/>
        </port>
    </service>

</definitions>

Analizzando l'esempio appena visto notiamo la presenza dei seguenti tag:

TagDescrizione
definitionsL’elemento root che contiene il tutto. Definisce anche il nome del servizio.
typesDefinisce tutti i tipi di dato che possono essere scambiati tra client e server.
messageContiene i dati che possono essere scambiati tra client e server. Al suo interno definisce anche i parametri supportati e, per ogni parametro, il tipo di dato.
portTypeCombina uno o più messaggi per determinare un'operazione da compiere attraverso il Web Service.
bindingDefinisce come un'operazione portType viene trasmessa tra client e server. Determina il protocollo e la locazione del servizio necessario.
serviceContiene informazioni sul Web service come l'indirizzo a cui è disponibile lo stesso.

Tutte le lezioni

1 ... 49 50 51 ... 66

Se vuoi aggiornamenti su SOAP Web Service con PHP inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su SOAP Web Service con PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing