SOAP Server mit dem Zend Framework

Mittwoch, 23.12.2009 | PHP | Keine Kommentare | php , wsdl , soap , webservices , zend framework

Um eine SOAP API zu programmieren benötigen wir erstmal eine Klasse, die alle Funktionen unserer neuen Schnittstelle bereitstellt.
<?php
// soap-server.php

$zendPath = '...';
set_include_path(get_include_path().PATH_SEPARATOR.$zendPath);

require 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

class MeinWebservice {

    /**
     * Gibt den Wert mal 10 zurück
     *
     * @param int $inputParam
     * @return int
     */
    public function test1($inputParam) {
        return $inputParam * 10;
    }

    /**
     * Addiert die Werte
     *
     * @param int $inputParam1
     * @param int $inputParam2
     * @return int
     */
    public function test2($inputParam1, $inputParam2) {
        return $inputParam1 + $inputParam2;
    }

}
?>
Unsere Klasse "MeinWebservice" stellt also die zwei Funktionen test1 und test2 bereit. Damit diese Funktionen aufgerufen werden können, erstellen wir jetzt unseren SOAP Server.
<?php
// soap-server.php

$wsdl = 'http://localhost/soap/soap-server.php?wsdl=1';

if($_GET['wsdl'] == 1) {
  $autodiscover = new Zend_Soap_AutoDiscover();
  $autodiscover->setClass('MeinWebservice');
  $autodiscover->handle();
} else {
  $server = new Zend_Soap_Server($wsdl);
  $server->setClass('MeinWebservice');
  $server->handle();
}
?>
Mit $server->setClass() übergeben wir dem Zend_Soap_Server Objekt unsere Klasse. Um die WSDL automatisch aus unserer Klasse zu generieren verwenden wir Zend_Soap_AutoDiscover. Die WSDL wird aber nur erzeugt wenn der $_GET Parameter 'wsdl' auf 1 gesetzt wird. (Damit die WSDL richtig generiert wird muss der Docblock korrekt sein.) Ist 'wsdl' ungleich 1 übernimmt Zend_Soap_Server die verarbeitung. Um unseren Server zu testen erstellen wir uns einen Soap-Client und rufen unsere Funktionen auf.
<?php
// soap-client.php

$zendPath = '...';
set_include_path(get_include_path().PATH_SEPARATOR.$zendPath);

require 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

$client = new Zend_Soap_Client("http://localhost/soap/soap-server.php?wsdl=1");

$result = $client->test1(10);
var_dump($result);

$result = $client->test2(50, 35);
var_dump($result);
?>
Weitere Informationen zu SOAP gibt es bei Wikipedia und im Zend Framework Refernce Guide.

Share