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

SOAP Web Service con PHP: il server

Realizziamo la parte relativa al server di un SOAP Web Service con PHP.
Realizziamo la parte relativa al server di un SOAP Web Service con PHP.
Link copiato negli appunti

Per realizzare il nostro server utilizzeremo la classe SoapServer inclusa nell'estensione php-soap. La classe prende in ingresso il path del file WSDL ed un array di opzioni.

Prima di iniziare aggiungiamo però qualche riga di codice necessaria al funzionamento del nostro esempio. Dato che siamo in un ambiente di sviluppo disabilitiamo la cache WSDL per evitare problemi e definiamo una classe Book necessaria per lo scambio di dati tra client e server:

//server.php
ini_set("soap.wsdl_cache_enabled","0");
class Book
{
    public $name;
    public $year;
}

A questo punto siamo pronti per creare il nostro server:

$server = new SoapServer("books.wsdl", [
        'classmap' => [
            'book' => 'Book',
        ]
    ]);
    $server->addFunction('getBook');
    $server->handle();

I parametri del costruttore sono, come già anticipato, i seguenti:

  • il path del file WSDL;
  • un array di opzioni. Nel nostro caso abbiamo passato un ulteriore array chiamato classmap che ci consente di mappare i tipi complessi definiti nel file WSDL direttamente sulle nostre classi PHP. In questo caso il tipo book definito nei types sarà mappato sulla nostra classe Book già definita.

Una volta istanziata la classe andremo ad esporre le funzioni che vogliamo utilizzare - in questo caso getBook - e poi a richiamare il metodo handle() che si occuperà di processare la richiesta che arriva dal client.

Non resta che definire la funzione getBook che riceverà in ingresso un intero e restituirà al client un oggetto di tipo Book:

function getBook($bookId)
{
    //simulazione di una ricerca. In un caso reale probabilmente faremo
    //una query sul database per restituire l'oggetto
    $book = new Book();
    $book->name = 'The Lord of the Rings';
    $book->year = 2017;
    return $book;
}

Il codice completo del file è il seguente:

<?php
    ini_set("soap.wsdl_cache_enabled","0");
    class Book
    {
        public $name;
        public $year;
    }
    $server=new SoapServer("books.wsdl",[
        'classmap'=>[
            'book'=>'Book',
        ]
    ]);
    $server->addFunction('getBook');
    $server->handle();
    function getBook($bookId)
    {
        //simulazione di una ricerca. In un caso reale probabilmente faremo
        //una query sul database per restituire l'oggetto
        $book = new Book();
        $book->name = 'The Lord of the Rings';
        $book->year = 2017;
        return $book;
    }

Ti consigliamo anche