Eigener Webservice in fünf Minuten

Für verschiedene Aufgaben ist es notwendig, dass mehrere Anwendungen möglichst nahtlos miteinander kommunizieren können. Dafür eignen sich Webservices sehr gut und wenn man keine Wissenschaft daraus machen möchte, kann man auch schnelle Ergebnisse erzielen

Damit wir zum Testen ein paar “lebendige” Daten haben, schreiben wir uns erstmal eine kleine Testklasse.

<?php
// myDate.php
class myDate
{
  function date($format='Y-m-d H:i:s', $timestamp = null)
  {
    return date($format, ($timestamp ? $timestamp : time()));
  }
}

Im Prinzip kann hier eine beliebige Klasse verwendet werden.

Da wir nun eine Datenquelle haben, müssen wir diese auch zugänglich machen. Der Webservice dient aber nicht nur dem Datenaustausch. Objekte und Funktionen können damit über das Netzwerk fernbedient werden. Im besten Fall merkt man den Unterschied nicht, ob man mit einem lokalen Objekt oder einem Webservice arbeitet.

Nun aber zu unserem Server…

<?php
// server.php
require_once('myDate.php');

$server = new SoapServer(null, array('uri' => 'http://test-webservice/'));
$server->setClass('myDate');  // oder $server->setObject(new myDate());
$server->handle();

Zuerst binden wir die Klasse myDate ein. Innerhald einer Anwendung wird das wahrscheinlich über Autoload geschehen. Die Instanz des Servers erzeuge ich in minimalster Form, ebenso sparsam bin ich beim Aufruf von handle(). Damit der Server arbeiten kann, müssen wir ihm den Klassennamen oder eine fertiges Objekt übergeben.

Wer nun mehr Code beim Client erwartet, den muss ich leider enttäuschen, es wird noch weniger.

<?php
// client.php
$url = 'http://' . $_SERVER['SERVER_NAME']
     . dirname($_SERVER['PHP_SELF']) . '/server.php';
$client = new SoapClient(null, array('location' => $url,
                                     'uri' => 'http://test-webservice/'));

echo 'Output: ' . $client->date();

Wir erzeugen uns eine Instanz des Soap-Clients und können dann wie auf dem “echten” Objekt Methoden aufrufen. Die Methode Date funktionert wie die PHP-Funktion date() mit einem Standardformat.

Ein wenig mehr ist schon zu beachten, wenn wir den Server in einer Controller-Action verbauen wollen. In dem Fall müssen wir die Ausgabe buffern und ans das Response-Objekt übergeben.

$server = new SoapServer(null, array('uri' => 'http://test-webservice/'));
$server->setObject($helper);

ob_start();
$server->handle(file_get_contents('php://input'));
$this->getResponse()->appendBody(ob_get_contents());
ob_clean();

Wer mehr zu dem Thema wissen will, sollte sich das Kapitel SOAP im PHP-Manual ansehen.

Ein Kommentar

  1. Das erste Beispiel, das funktioniert.

    Vielen Dank!!

Schlagwörter: Adapter, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, AutoLoader, Bedienung, Bedingung, Benchmark, Bildbearbeitung, BOM, Bootstrap, Bot, Byte Order Mark, Callback, CamelCase, Canvas, Captcha, Cheatsheet, CLI, Closure, Cloud, CodeSniffer, Community, Comparator, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CSV, CustomLibrary, Custom_Model, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Decorator, Dekorierer, Design Patterns, Dump, Duplikat, each, Eclipse, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Eventhandling, Exception-Handling, Extension, Factory, Fehler, Flash, Foreach, Formatierung, Formular, Funktion, Futon, Header, HTML5, HTTP, IDE, If, Implementierung, InnoDB, Interceptor, Interface, isset, Iterator, Java, JavaScript, jQuery, Konfiguration, Konsole, Kontrollstruktur, kopieren, Late Static Binding, Layout, Linux, Listeners, Logging, Löschen, Magento, Magic Methods, Marketing, Methode, Model, MVC, MySQL, NetBeans, Objekt, Observable, Observer, OOP, Operator, Parameter, Partnersuche, Performance, PHP, phpMyAdmin, PHPUnit, Plugin, Proxy, Qualitätssicherung, Query, Reflection, Request, Response, Rest-API, Rockstar, Routing, S3, Samba, Scheifen, Schleife, Schutz, Secure Shell, Selbstreferenz, Shop, Sicherheit, Sicherung, Singleton Pattern, SOAP, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, SSH, Statement, Stellvertreter, Strategy Pattern, Stream, String, Sun VirtualBox, Support, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Thumbnail, Tool, Tour, Twig, Type-Cast, Umwandlung, Underscore, unset, Vererbung, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Webserver, Webservice, Weiterleitung, Wrapper, Youtube, Zeitsteuerung, Zend Framework, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Service, Zugriffsmethode