| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.soap.server">
- <title>Zend_Soap_Server</title>
- <para>
- Die <classname>Zend_Soap_Server</classname> Klasse ist dazu gedacht den Web Service Teil der
- Entwicklung für <acronym>PHP</acronym> Programmierer zu vereinfachen.
- </para>
- <para>
- Sie kann in WSDL oder nicht-WSDL Modus verwendet werden, und verwendet Klassen oder
- Funktionen um eine Web Service <acronym>API</acronym> zu definieren.
- </para>
- <para>
- Wenn die <classname>Zend_Soap_Server</classname> Komponente im WSDL Modus arbeitet,
- verwendet Sie ein bereits vorbereitetes WSDL Dokument um das Verhalten des Server Objekts
- und die Optionen des Transport Layers zu definieren.
- </para>
- <para>
- Ein WSDL Dokument kann automatisch erzeugt werden mit der Funktionalität die von der <link
- linkend="zend.soap.autodiscovery.introduction">Zend_Soap_AutoDiscovery Komponente</link>
- angeboten wird sollte händisch erzeugt werden durch Verwendung der <link
- linkend="zend.soap.wsdl"><classname>Zend_Soap_Wsdl</classname> Klasse</link> oder
- irgendeinem anderen <acronym>XML</acronym> Erstellungstool.
- </para>
- <para>
- Wenn der nicht-WSDL Modus verwendet wird, müssen alle Protokoll-Optionen gesetzt werden
- indem der Options-Mechanismus verwendet wird.
- </para>
- <sect2 id="zend.soap.server.constructor">
- <title>Der Zend_Soap_Server Konstruktor</title>
- <para>
- Der Contructor von <classname>Zend_Soap_Server</classname> sollte für WSDL und
- nicht-WSDL Modi unterschiedlich verwendet werden.
- </para>
- <sect3 id="zend.soap.server.constructor.wsdl_mode">
- <title>Der Zend_Soap_Server Konstruktor für den WSDL Modus</title>
- <para>
- Der <classname>Zend_Soap_Server</classname> Konstruktor nimmt zwei optionale
- Parameter wenn er im WSDL Modus arbeitet:
- <orderedlist>
- <listitem>
- <para>
- <varname>$wsdl</varname>, welcher eine <acronym>URI</acronym> einer
- WSDL Datei ist
- <footnote>
- <para>
- Kann später gesetzt werden durch Verwendung der
- <methodname>setWsdl($wsdl)</methodname> Methode.
- </para>
- </footnote>.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$options</varname> - Optionen für die Erstellung eines
- <acronym>SOAP</acronym> Server Objektes
- <footnote>
- <para>
- Optionen können durch Verwendung der
- <methodname>setOptions($options)</methodname> Methode später
- gesetzt werden.
- </para>
- </footnote>.
- </para>
- <para>
- Die folgenden Optionen werden im WSDL Modus erkannt:
- <itemizedlist>
- <listitem>
- <para>
- 'soap_version' ('soapVersion') - Die zu verwendende SOAP
- Version (SOAP_1_1 or <acronym>SOAP</acronym>_1_2).
- </para>
- </listitem>
- <listitem>
- <para>
- 'actor' - Die Aktions-<acronym>URI</acronym> für den Server.
- </para>
- </listitem>
- <listitem>
- <para>
- 'classmap' ('classMap') welche verwendet werden kann um
- einige WSDL Typen auf <acronym>PHP</acronym> Klassen zu
- mappen.
- </para>
- <para>
- Die Option muß ein Array mit WSDL Typen als Schlüssel und
- Namen von <acronym>PHP</acronym> Klassen als Werte sein.
- </para>
- </listitem>
- <listitem>
- <para>
- 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als
- externe Kodierung verwendet).
- </para>
- </listitem>
- <listitem>
- <para>
- 'wsdl' welcher dem Aufruf von
- <methodname>setWsdl($wsdlValue)</methodname> entspricht.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </listitem>
- </orderedlist>
- </para>
- </sect3>
- <sect3 id="zend.soap.server.wsdl_mode">
- <title>Der Zend_Soap_Server Konstruktor für den nicht-WSDL Modus</title>
- <para>
- Der erste Parameter des Konstruktors <emphasis>muß</emphasis> auf
- <constant>NULL</constant> gesetzt werden wenn man plant die Funktionalität von
- <classname>Zend_Soap_Server</classname> im nicht-WSDL Modus zu verwenden.
- </para>
- <para>
- Man muß in diesem Fall auch die 'uri' Option setzen (siehe anbei).
- </para>
- <para>
- Der zweite Parameter des Konstruktors (<varname>$options</varname>) ist ein Array
- mit Optionen um ein <acronym>SOAP</acronym> Server Objekt zu erstellen
- <footnote>
- <para>
- Optionen können später gesetzt werden indem die
- <methodname>setOptions($options)</methodname> Methode verwendet wird.
- </para>
- </footnote>.
- </para>
- <para>
- Die folgenden Optionen werden im nicht-WSDL Modus erkannt:
- <itemizedlist>
- <listitem>
- <para>
- 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
- (SOAP_1_1 or <acronym>SOAP</acronym>_1_2).
- </para>
- </listitem>
- <listitem>
- <para>
- 'actor' - Die Aktions-<acronym>URI</acronym> für den Server.
- </para>
- </listitem>
- <listitem>
- <para>
- 'classmap' ('classMap') welche verwendet werden kann um einige WSDL
- Typen auf <acronym>PHP</acronym> Klassen zu mappen.
- </para>
- <para>
- Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
- <acronym>PHP</acronym> Klassen als Werte sein.
- </para>
- </listitem>
- <listitem>
- <para>
- 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
- Kodierung verwendet).
- </para>
- </listitem>
- <listitem>
- <para>
- 'uri' (benötigt) - <acronym>URI</acronym> Namespace für den
- <acronym>SOAP</acronym> Server.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.soap.server.api_define_methods">
- <title>Methoden um eine Web Service API zu definieren</title>
- <para>
- Es gibt zwei Wege um eine Web Service <acronym>API</acronym> zu definieren wenn man
- Zugriff auf den eigenen <acronym>PHP</acronym> Code über <acronym>SOAP</acronym> geben
- will.
- </para>
- <para>
- Der Erste ist das Anfügen einer Klasse zum <classname>Zend_Soap_Server</classname>
- Objekt welche eine Web Service <acronym>API</acronym> komplett beschreibt:
- </para>
- <programlisting language="php"><![CDATA[
- ...
- class MyClass {
- /**
- * Diese Methode nimmt ...
- *
- * @param integer $inputParam
- * @return string
- */
- public function method1($inputParam) {
- ...
- }
- /**
- * Diese Methode nimmt ...
- *
- * @param integer $inputParam1
- * @param string $inputParam2
- * @return float
- */
- public function method2($inputParam1, $inputParam2) {
- ...
- }
- ...
- }
- ...
- $server = new Zend_Soap_Server(null, $options);
- // Die Klasse an den Soap Server binden
- $server->setClass('MyClass');
- // Binden eines bereits initialisierten Objekts an den Soap Server
- $server->setObject(new MyClass());
- ...
- $server->handle();
- ]]></programlisting>
- <note>
- <title>Wichtig!</title>
- <para>
- Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden
- verwendet werden wenn man plant die Autodiscovery Funktionalität zu verwenden um
- ein entsprechendes Web Service WSDL vorzubereiten.
- </para>
- </note>
- <para>
- Die zweite Methode der Definition einer Web Service <acronym>API</acronym> ist die
- Verwendung eines Sets von Funktionen und <methodname>addFunction()</methodname> oder
- <methodname>loadFunctions()</methodname> Methoden:
- </para>
- <programlisting language="php"><![CDATA[
- ...
- /**
- * Diese Funktion ...
- *
- * @param integer $inputParam
- * @return string
- */
- function function1($inputParam) {
- ...
- }
- /**
- * Diese Funktion ...
- *
- * @param integer $inputParam1
- * @param string $inputParam2
- * @return float
- */
- function function2($inputParam1, $inputParam2) {
- ...
- }
- ...
- $server = new Zend_Soap_Server(null, $options);
- $server->addFunction('function1');
- $server->addFunction('function2');
- ...
- $server->handle();
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.soap.server.request_response">
- <title>Anfragen und Antwort Objekte behandeln</title>
- <note>
- <title>Fortgeschritten</title>
- <para>
- Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von
- Anfrage-/Antwort-Optionen und kann übersprungen werden.
- </para>
- </note>
- <para>
- Die <classname>Zend_Soap_Server</classname> Komponente führt Anfrage/Antwort-Bearbeitung
- automatisch durch. Sie erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen
- durchzuführen.
- </para>
- <sect3 id="zend.soap.server.request_response.request">
- <title>Anfrage Bearbeitung</title>
- <para>
- Die <methodname>Zend_Soap_Server::handle()</methodname> Methode nimmt Anfragen vom
- Standard-Eingabe Stream ('php://input') entgegen. Sie kann übergangen werden durch
- die Angabe von optionalen Parametern an die <methodname>handle()</methodname>
- Methode oder durch setzen einer Anfrage durch Verwendung der
- <methodname>setRequest()</methodname> Methode:
- </para>
- <programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters
- $server->handle($request);
- ...
- // Eine Anfrage setzen durch Verwendung der setRequest() Methode
- $server->setRequest();
- $server->handle();
- ]]></programlisting>
- <para>
- Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
- <itemizedlist>
- <listitem>
- <para>
- DOMDocument (gecastet zu <acronym>XML</acronym>)
- </para>
- </listitem>
- <listitem>
- <para>
- DOMNode (Besitzer Dokument wird genommen und zu <acronym>XML</acronym>
- gecastet)
- </para>
- </listitem>
- <listitem>
- <para>
- SimpleXMLElement (gecasted zu <acronym>XML</acronym>)
- </para>
- </listitem>
- <listitem>
- <para>
- stdClass (__toString() wird aufgerufen und geprüft ob es gültiges
- <acronym>XML</acronym> ist)
- </para>
- </listitem>
- <listitem>
- <para>
- string (geprüft ob es gültiges <acronym>XML</acronym> ist)
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- Die zuletzt bearbeitete Anfrage kann durch Verwendung der
- <methodname>getLastRequest()</methodname> Methode als <acronym>XML</acronym> String
- empfangen werden:
- </para>
- <programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- $server->handle();
- $request = $server->getLastRequest();
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.soap.server.request_response.response">
- <title>Antworten vor-bearbeiten</title>
- <para>
- Die <methodname>Zend_Soap_Server::handle()</methodname> Methode wirft die erzeugte
- Antwort automatisch auf den Ausgabe Stream aus. Das kann durch Verwendung von
- <methodname>setReturnResponse()</methodname> mit <constant>TRUE</constant> oder
- <constant>FALSE</constant> als Parameter blockiert werden
- <footnote>
- <para>
- Der aktuelle Status des Rückgabe Antwort Flags kann mit der
- <methodname>setReturnResponse()</methodname> Methode abgefragt werden.
- </para>
- </footnote>.
- Die erzeugte Antwort wird in diesem Fall durch die <methodname>handle()</methodname>
- Methode zurückgegeben.
- </para>
- <programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- // Eine Antwort als Rückgabewert der handle() Methode
- // erhalten statt diese auf den Ausgabe Stream zu werfen
- $server->setReturnResponse(true);
- ...
- $response = $server->handle();
- ...
- ]]></programlisting>
- <para>
- Die letzte Antwort kann auch mit der <methodname>getLastResponse()</methodname>
- Methode empfangen werden um Vor-Bearbeitungen durchzuführen:
- </para>
- <programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- $server->handle();
- $response = $server->getLastResponse();
- ...
- ]]></programlisting>
- </sect3>
- </sect2>
- </sect1>
|