SteviesWebsite

Tutorial: Webservice mit PHP erstellen

Webservice erstellen

Webservice erstellen

Webservices sind eine spannende Sache. Man kann damit mit anderern Programmen kommunizieren. So kann man  zum Beispiel mit PHP erstelle Funktionen in einem VB.net Programm aufrufen. Heute möchte ich euch einmal zeigen, wie man so etwas mit PHP macht.

Dateien des PHP-Webservice

WSDL-Datei

Ein WebService wird immer in einer WSDL Datei definiert. Die Url dieser Datei muss später im Client angegeben werden. Zum Aufbau gibt es später mehr ;-)

PHP-Datei

In der PHP Datei geschieht das Abarbeiten der Funktionen. Hier können wir zum Beispiel auf eine Webdatenbank zugreifen und Datenstätze an den Client senden.

Beispiel: Erstellung eines Mathe WebServices

WebServices sind eigentlich nicht dazu da, um einfache Berechnungen durchzuführen, die man so in jeder Sprache machen kann. Aber dies wird eben nur ein einfaches Beispiel. Denn ihr wollt ja wissenwie man einen WebService erstellt und dafür reichen auch einfache Funktionen. Außerdem ist es mit einfachen Funktionen übersichtlicher. Das komplizierte ist dann euch überlassen :-P

SoapServer – Klasse

Die SoapServer Klasse ist die Klasse, die in der PHP-Datei angesprochen werden muss. Diese steht euch normalerweise unter PHP5 zur Verfügung.

Konstruktor

Der Konstruktor benötigt die WSDL-Datei als Parameter. Sie kann einfach im gleichen Verzeichnis wie das Script liegen.

Beispiel:

$server = new SoapServer("math.wsdl")

addFunction Methode

Mit der AddFunction Methode kann man den Namen der PHP-Funktion die ausgeführt werden soll hinzufügen.

Beispiel:

$server->addFunction("add");

Hier wird die PHP-Funktion add hinzugefügt (Definition unten).

handle Methode

Die Handle Methode führ die Funktion dann aus. Sie sollte am Ende der zuweisungen stehen.

Das komplette PHP-Script

Hier ist nochmal das komplette Script inkl. der add Funktion:

<?php 
function add($a, $b) { 
  return $a + $b; 
} 

$server = new SoapServer("math.wsdl"); 
$server->addFunction("add");
$server->handle(); 
?>

Die WSDL-Datei

Fehlt uns noch die WSDL-Datei. Wie eben bereits erwähnt steht in ihr die Definition des WebServices.

Fangen wir mal ganz oben an: Die XML-Deklaration. (Weil WSDL auf XML basiert)

<?xml version ='1.0' encoding ='UTF-8' ?>

Nach der Deklaration von XML kommt natürlich das Root-Tag im XML. Bei WSDL ist dies Definition:

<definitions name='Math'
  targetNamespace='http://temp.stevieswebsite.de/Math'
  xmlns:tns='http://temp.stevieswebsite.de/Math'
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>

Und hier sind die wichtigsten Attribute:

  • Name: Gibt den Namen des WebServices an. Da es sich bei und um Mathe-Funktionen handelt, heißt der hier Math.
  • targetNamespace, xmlns:tns: Geben den Namespace des WebServices an. Soweit ich weiß gibt es in PHP noch keine Namespaces, also werd ich mal kurz erklären worum es geht: Ein Namespace ist eine Gruppierung von Elementen (Klassen, Enums,…). Er kann auch weitere Namespaces beinhalten. Über VB.net würde man die Mathe Klasse so ansteuern: {Name des WS in VB}.de.stevieswebsite.temp.Math

Die weiteren Deklarationen definieren einfach, dass es sich um einen WebService handelt.

Jetzt geht es um den wichtigen Teile der WSDL. Fangen wir an mit der Definition der Rückgabe-Typen.

Mit dem Tag Message wird eine Gruppe von Parametern, die entweder zum Server geschickt wird, oder vom Server kommt:

<message name='addRequest'>
  <part name='a' type='xsd:int'/>
  <part name='b' type='xsd:int'/>
</message>
<message name='addResponse'>
  <part name='Result' type='xsd:int'/>
</message>

Hier haben wir 2 Parameterlisten. Der erste ist addRequest. Er definiert die Parameter, die die PHP-Funktion erwartet. Wir haben in der Funktion add die Parameter a und b. Da wir diese addieren sind sie vom Typ int.

Die zweite Liste liefert den Rückgabewert der Funktion. Hier heißt er schlichtweg ‘Result’. Er ist ebenfalls ein int.

Nun geht es um die Zuweisung dieser Parameterlisten zur Funktion. Dies geschieht im Port-Type Tag.

Man kann dort mehrere operation-Tags angeben. Jeder Tag steht für eine Funktion:

<portType name='addPortType'>
  <operation name='add'>
    <input message='tns:addRequest'/>
    <output message='tns:addResponse'/>
  </operation>
</portType>

Bei der Operation muss man als Namen den Namen der PHP-Funktion angeben. Im input-Tag wird die Parameterliste für den Funktionsaufruf angegeben. Output gibt hingegen die Liste des Rückgabewerts an.

Nun kommt noch das Binding. Hier müssen in Operation nochmal der Name desWSDL und der Funktionsname angegeben werden:

<binding name='addBinding' type='tns:addPortType'>
  <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='add'>
    <soap:operation soapAction='urn:Math#add'/>
    <input>
      <soap:body use='encoded' namespace='urn:Math'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:Math'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
</binding>

Jetzt kommen wir auch schon zum Ende der WSDL Datei. Wir müssen nun die URL der PHP-Datei angeben:

<service name='addService'>
  <port name='addPort' binding='addBinding'>
    <soap:address location='http://temp.stevieswebsite.de/server.php'/>
  </port>
</service>

Das war jetzt nen bisschen lang. Deswegen ist hier nochmal die komplette WSDL-Datei.

<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='Math'
  targetNamespace='http://temp.stevieswebsite.de/Math'
  xmlns:tns='http://temp.stevieswebsite.de/Math'
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'> 

<message name='addRequest'>
  <part name='a' type='xsd:int'/>
  <part name='b' type='xsd:int'/>
</message>
<message name='addResponse'>
  <part name='Result' type='xsd:int'/>
</message> 

<portType name='addPortType'>
  <operation name='add'>
    <input message='tns:addRequest'/>
    <output message='tns:addResponse'/>
  </operation>
</portType> 

<binding name='addBinding' type='tns:addPortType'>
  <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='add'>
    <soap:operation soapAction='urn:Math#add'/>
    <input>
      <soap:body use='encoded' namespace='urn:Math'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:Math'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
</binding> 

<service name='addService'>
  <port name='addPort' binding='addBinding'>
    <soap:address location='http://temp.stevieswebsite.de/server.php'/>
  </port>
</service>
</definitions>

Testen

Das es im diesem Tutorial nur über das erstellen eines WebServices geht und nicht um das Benutzen, zeige ich euch hier nur kurz, wie man den WebService testen. Wie ihr das nachher in eurem Code macht, solltet ihr später in der Doku eurer Programmiersprache nachsehen. Aber einen kleinen Tipp gib ich noch: In PHP gibt es eine Klasse die SoapClient heißt und im VS kann man über Projekt->Webverweis hinzufügen den WebService Benutzen.

Also jetzt zum Online Test. Hier bin ich auf die Seite soapclient.com gestoßen.

Hier kann man zu erst die URL des WebServices angeben. In meinem Fall ist dies http://temp.stevieswebsite.de/math.wsdl.

Nun sieht man die Funktionen und deren Parameter. In den Parametern kann man jetzt einfach unsere Werte für a und b eingeben. Ich teste es mal mit 5 und 9.

Wenn ich jetzt auf “Invoke klicke” bekomme ich 14 zurück. Klasse, es hat geklappt!

Verwandte Themen

RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

7 Kommentare »

  1. Danke für das Tutorial. Lässt sich gut lesen und ist mit Beispielcode.

    Kommentar von Clatsch — 25. Juni 2009 @ 21:40

  2. Wie immer ein Klasse Tutorial :)

    Kommentar von Simon Strasser — 27. Juni 2009 @ 14:03

  3. Vielen Dank euch beiden

    Kommentar von Stefan Wienströer — 27. Juni 2009 @ 14:12

  4. Tolles Tut, vielen Dank!

    Kommentar von Mich — 9. Mai 2010 @ 10:25

  5. Super Tutorial. Hat mir echt geholfen und auch ein rooky wie ich kommt sofort mit allem klar! DANKE

    Kommentar von mkey — 31. August 2010 @ 13:55

Hinterlasse einen Kommentar

Trackbacks/Pingbacks

  1. [...] Vorgestern gab es ein Tutorial, wie man einen WebService mit PHP erstellt. Heute werde ich den gleichen WebService in ASP.net erstellen. So das ihr einmal ein wenig [...]

    Pingback von Tutorial: WebService mit ASP.net erstellen | SteviesWebsite Blog — 27. Juni 2009 @ 13:24

  2. [...] Tutorial: Webservice mit PHP erstellen – 380 Zugriffe [...]

    Pingback von SteviesWebsite Statistik Juli 2009 | SteviesWebsite Blog — 1. August 2009 @ 12:47

Facebook LogoErstelle deinen eigenen virtuellen PC. Das ist bereits mit leichten Mitteln möglich, welche Du in diesem Tutorial lernst.[mehr...]

WebanalyseFür die Verbesserung Deiner Seite solltest Du wissen, wie sich die Besucher verhalten. Diese Artikel zeigen Dir wie man das am geschicktesten macht. [mehr...]

Blog Tutorials... helfen dir deinen Blog zu verbessern. Nebenbei gibt es noch nützliche Blog-Tools. [mehr...]

Facebook LogoMit Hilfe dieses Tutorials kannst Du deine eigene Facebook Anwendung in PHP programmieren. [mehr...]

  • RSS
  • Blogverzeichnis - Blog Verzeichnis bloggerei.de
Ich biete mich als Lektor für deine Blog-Artikel an.
Sende mir einfach deinen Artikel und ich korrigiere ihn.
© SteviesWebsite.de - Kontakt | Impressum