Dopo aver realizzato il server, siamo pronti a questo punto ad effettuare chiamate SOAP indirizzandole ad esso. Per farlo utilizziamo un semplice client in PHP, fermo restando che il client potrebbe essere scritto in qualsiasi altro linguaggio vista la natura dei Web Server.
Anche in questo caso prima di procedere aggiungiamo qualche riga di codice necessaria al nostro esempio. Impostiamo una durata molto breve della cache e definiamo la classe Book
:
//client.php
ini_set('soap.wsdl_cache_ttl', 1);
class Book
{
public $name;
public $year;
}
Definiamo quindi il client attraverso la classe SoapClient. La firma del costruttore è esattamente la stessa del server, la differenza sta nel fatto che il path del file WSDL sarà nella maggior parte dei casi remoto.
$client = new SoapClient(
//http://example.com/books.wsdl in caso di chiamata remota
dirname(__FILE__) . '/books.wsdl',
[
'classmap' => [
'book' => 'Book',
]
]
);
Nel nostro esempio, trattandosi di una procedura in locale, utilizziamo un path assoluto per richiamare il file WSDL. Nel caso in cui il client non sia nella stessa macchina del server potremmo utilizzare invece il protocollo HTTP come nell'esempio commentato.
Ora che abbiamo definito il nostro client possiamo richiamare la funzione getBook
definita nel file WSDL:
$response = $client->getBook(1);
$book = $response->enc_value;
var_dump($book);
Eseguendo un dump della variabile book
vedremo che si tratta di un oggetto di tipo Book
con le proprietà correttamente settate:
object(Book)#2 (2) {
["name"]=>
string(21) "The Lord of the Rings"
["year"]=>
string(4) "2017"
}
Il codice completo dell'esempio:
<?php
ini_set('soap.wsdl_cache_ttl', 1);
class Book
{
public $name;
public $year;
}
$client = new SoapClient(
dirname(__FILE__) . '/books.wsdl',
array(
'classmap' => array('book' => "Book"),
)
);
$response = $client->getBook(1);
var_dump($response->enc_value);
Nel caso avessimo la necessità di debuggare le funzionalità messe a disposizione dal nostro server SOAP, potremmo utilizzare il metodo __getFunctions()
che restituirà un array con tutte le operazioni definite dal file WSDL.