Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 50 di 67
  • livello intermedio
Indice lezioni

SOAP Web Service con PHP

Introduciamo le basi per realizzare un Web service con PHP basato sul protocollo SOAP, utilizzato per scambiare informazioni tra software attraverso XML.
Introduciamo le basi per realizzare un Web service con PHP basato sul protocollo SOAP, utilizzato per scambiare informazioni tra software attraverso XML.
Link copiato negli appunti

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:

Tag Descrizione
definitions L'elemento root che contiene il tutto. Definisce anche il nome del servizio.
types Definisce tutti i tipi di dato che possono essere scambiati tra client e server.
message Contiene 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.
portType Combina uno o più messaggi per determinare un'operazione da compiere attraverso il Web Service.
binding Definisce come un'operazione portType viene trasmessa tra client e server. Determina il protocollo e la locazione del servizio necessario.
service Contiene informazioni sul Web service come l'indirizzo a cui è disponibile lo stesso.

Ti consigliamo anche