| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15156 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.json.server">
- <title>Zend_Json_Server - JSON-RPC server</title>
- <para>
- <classname>Zend_Json_Server</classname> ist eine
- <ulink url="http://groups.google.com/group/json-rpc/">JSON-RPC</ulink> Server Implementierung. Sie
- unterstützt sowohl <ulink url="http://json-rpc.org/wiki/specification">dieSpezifikation von JSON-RPC Version 1</ulink>
- als auch die <ulink url="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">Spezifikation der Version 2</ulink>;
- zusätzlich bietet Sie eine PHP Implementierung der
- <ulink url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">Spezifikation für Service Mapping Description (SMD)</ulink>
- Um Kunden von Services deren Metadaten anzubieten.
- </para>
- <para>
- JSON-RPC ist ein leichgewichtiges Remoce Procedure Call Protokoll das JSON für seine Nachrichten
- verwendet. Diese JSON-RPC Implementierung folgt PHP's
- <ulink url="http://us.php.net/manual/en/function.soap-soapserver-construct.php">SoapServer</ulink> API.
- Das bedeutet das in einer typischen Situation einfach folgendes getan wird:
- </para>
- <itemizedlist>
- <listitem><para>Instanzieren des Server Objekts</para></listitem>
- <listitem><para>Eine oder mehrere Funktionen und/oder Klassen/Objekte dem Server Objekt hinzufügen</para></listitem>
- <listitem><para>Die Anfrage mit handle() ausführen</para></listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server</classname> verwendet <xref linkend="zend.server.reflection" /> um Reflektion
- durchzuführen um den SMD zu erstellen und die Signaturen der Methodenaufrufe zu erzwingen. Als solche,
- ist es zwingend notwendig das alle hinzugefügten Funktionen und/oder Klassenmethoden komplette PHP
- Docblocks dokumentiert haben mindestens aber:
- </para>
- <itemizedlist>
- <listitem><para>Alle Parameter und deren erwarteter Variablentypen</para></listitem>
- <listitem><para>Den Variablentyp des Rückgabewertes</para></listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server</classname> hört aktuell nur auf POST Anfragen; glücklicherweise bieten die meisten
- JSON-RPC Client Implementierungen die zur aktuell vorhanden sind nur POST Anfragen. Das macht es einfach
- den gleichen Endpunkt des Servers so zu verwenden das er beide Anfragen behandelt sowie die Service SMD
- liefert, wie im nächsten Beispiel gezeigt.
- </para>
- <example id="zend.json.server.usage">
- <title>Zend_Json_Server Verwendung</title>
- <para>
- Zuerst müssen wir eine Klasse definieren die wir über den JSON-RPC Server ausliefern wollen.
- Wir nennen die Klasse 'Calculator', und definieren die Methoden 'add', 'substract', 'multiple',
- und 'divide':
- </para>
- <programlisting role="php"><![CDATA[
- /**
- * Calculator - Einfache Klasse zur Auslieferung über JSON-RPC
- */
- class Calculator
- {
- /**
- * Summe von zwei Variablen zurückgeben
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function add($x, $y)
- {
- return $x + $y;
- }
- /**
- * Differenz von zwei Variablen zurückgeben
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function subtract($x, $y)
- {
- return $x - $y;
- }
- /**
- * Produkt von zwei Variablen zurückgeben
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function multiply($x, $y)
- {
- return $x * $y;
- }
- /**
- * Division von zwei Variablen zurückgeben
- *
- * @param int $x
- * @param int $y
- * @return float
- */
- public function divide($x, $y)
- {
- return $x / $y;
- }
- }
- ]]></programlisting>
- <para>
- Es ist zu beachten das jede Methode einen Docblock mit Einträgen besitzt die jeden Parameter und
- seinen Typ beschreiben, sowie einen Eintrag für den Rückgabewert. Das ist
- <emphasis>absolut kritisch</emphasis> wenn <classname>Zend_Json_Server</classname> verwendet wird -- oder auch
- jede andere Server Komponente für diesen Zweck im Zend Framework.
- </para>
- <para>
- Erstellen wir also ein Skript um die Anfrage zu behandeln:
- </para>
- <programlisting role="php"><![CDATA[
- $server = new Zend_Json_Server();
- // Zeigt welche Funktionalität vorhanden ist:
- $server->setClass('Calculator');
- // Behandelt die Anfrage:
- $server->handle();
- ]]></programlisting>
- <para>
- Trotzdem behandelt das noch immer nicht das Problem der Rückgabe eines SMD damit der JSON-RPC
- Client die Methoden selbstständig erkennen kann. Das kann getan werden indem die HTTP Anfragemethode
- erkannt wird, und anschließend einige Metadaten des Servers spezifiziert werden:
- </para>
- <programlisting role="php"><![CDATA[
- $server = new Zend_Json_Server();
- $server->setClass('Calculator');
- if ('GET' == $_SERVER['REQUEST_METHOD']) {
- // Zeigt den Endpunkt der URL, und die verwendete JSON-RPC Version:
- $server->setTarget('/json-rpc.php')
- ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
- // Den SMD holen
- $smd = $server->getServiceMap();
- // Den SMD an den Client zurückgeben
- header('Content-Type: application/json');
- echo $smd;
- return;
- }
- $server->handle();
- ]]></programlisting>
- <para>
- Wenn der JSON-RPC Server mit dem Dojo Toolkit verwendet wird muß auch ein spezielles
- Kompatibilitätsflag gesetzt werden um sicherzustellen das die zwei korrekt miteinander arbeiten:
- </para>
- <programlisting role="php"><![CDATA[
- $server = new Zend_Json_Server();
- $server->setClass('Calculator');
- if ('GET' == $_SERVER['REQUEST_METHOD']) {
- $server->setTarget('/json-rpc.php')
- ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
- $smd = $server->getServiceMap();
- // Die Kompatibilität zu Dojo setzen:
- $smd->setDojoCompatible(true);
- header('Content-Type: application/json');
- echo $smd;
- return;
- }
- $server->handle();
- ]]></programlisting>
- </example>
- <sect2 id="zend.json.server.details">
- <title>Fortgescrittene Details</title>
- <para>
- Obwohl das meiste an Funktionalität für <classname>Zend_Json_Server</classname> in
- <xref linkend="zend.json.server.usage" /> beschrieben wurde, ist noch weitere fortgeschrittenere
- Funktionalität vorhanden.
- </para>
- <sect3 id="zend.json.server.details.zendjsonserver">
- <title>Zend_Json_Server</title>
- <para>
- <classname>Zend_Json_Server</classname> ist die Kernklasse von JSON-RPC; die bearbeitet alle Anfragen und
- gibt den Antwort Payload zurück. Sie hat die folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem><para><code>addFunction($function)</code>: Spezifiziert eine benutzerdefinierte
- Funktion die dem Server hinzugefügt werden soll.</para></listitem>
- <listitem><para><code>setClass($class)</code>: Spezifiziert eine Klasse oder ein Objekt das dem
- Server hinzugefügt werden soll; alle öffentlichen Methoden dieses Elemente werden als
- JSON-RPC Methoden bekanntgegeben.</para></listitem>
- <listitem><para><code>fault($fault = null, $code = 404, $data =
- null)</code>: Erstellt und retourniert ein
- <classname>Zend_Json_Server_Error</classname> Objekt.</para></listitem>
- <listitem><para><code>handle($request = false)</code>: Behandelt eine JSON-RPC Anfrage; optional
- kann ein <classname>Zend_Json_Server_Request</classname> Objekt für die Anpassung übergeben werden
- (standardmäßig wird eines erstellt).</para></listitem>
- <listitem><para><code>getFunctions()</code>: Gibt eine Liste aller hinzugefügten Methoden
- zurück.</para></listitem>
- <listitem><para><code>setRequest(Zend_Json_Server_Request
- $request)</code>: Spezifiziert ein Anfrageobjekt um es für den Server zu verwenden.</para></listitem>
- <listitem><para><code>getRequest()</code>: Empfängt das Anfrageobjekt das vom Server verwendet
- wird.</para></listitem>
- <listitem><para><code>setResponse(Zend_Json_Server_Response
- $response)</code>: Setzt das Antwort Objekt das der Server verwendet.</para></listitem>
- <listitem><para><code>getResponse()</code>: Empfängt das Anfrageobjekt das vom Server
- verwendet wird.</para></listitem>
- <listitem><para><code>setAutoEmitResponse($flag)</code>:
- Zeigt ob der Server die Antworten und alle Header automatisch ausgeben sollte;
- standardmäßig ist das aktiviert.</para></listitem>
- <listitem><para><code>autoEmitResponse()</code>: Stellt fest ob das automatische senden der
- Antwort eingeschaltet ist.</para></listitem>
- <listitem><para><code>getServiceMap()</code>: Empfängt die Service Map Description in der Form
- eines <classname>Zend_Json_Server_Smd</classname> Objekts</para></listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserverrequest">
- <title>Zend_Json_Server_Request</title>
- <para>
- Die JSON-RPC Anfrageumgebung ist in ein <classname>Zend_Json_Server_Request</classname> Objekt
- eingekapselt. Diese Objekt erlaubt es die notwendigen Teile der JSON-RPC Anfrage zu setzen,
- inklusive der Anfrage ID, Parametern, und der JSON-RPC spezifischen Version. Es hat die
- Möglichkeit sich selbst über JSON zu laden oder ein Set von Optionen, und kann sich selbst
- über die <code>toJson()</code> Methode als JSON darstellen.
- </para>
- <para>
- Das Anfrage Objekt enthält die folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem><para><code>setOptions(array $options)</code>: Spezifiziert die Konfiguration des
- Objektes. <code>$options</code> kann Schlüssel enthalten die jeglicher 'set' Methode
- entsprechen: <code>setParams()</code>, <code>setMethod()</code>, <code>setId()</code>
- und <code>setVersion()</code>.</para></listitem>
- <listitem><para><code>addParam($value, $key = null)</code>: Fügt einen Parameter hinzu der
- mit einem Methodenaufruf verwendet wird. Parameter können nur Werte sein, oder optional
- auch den Parameternamen enthalten.</para></listitem>
- <listitem><para><code>addParams(array $params)</code>: Mehrere Parameter auf einmal hinzufügen;
- Ruft <code>addParam()</code> auf</para></listitem>
- <listitem><para><code>setParams(array $params)</code>: Setzt alle Parameter auf einmal;
- überschreibt jeden existierenden Parameter.</para></listitem>
- <listitem><para><code>getParam($index)</code>: Empfängt einen Parameter durch seine Position
- oder seinen Namen.</para></listitem>
- <listitem><para><code>getParams()</code>: Empfängt alle Parameter auf einmal.</para></listitem>
- <listitem><para><code>setMethod($name)</code>: Setzt die Methode die aufgerufen wird.</para></listitem>
- <listitem><para><code>getMethod()</code>: Empfängt die Methode die aufgerufen wird.</para></listitem>
- <listitem><para><code>isMethodError()</code>: Erkennt ob eine Anfrage fehlerhaft ist und einen
- Fehler produzieren würde, oder nicht.</para></listitem>
- <listitem><para><code>setId($name)</code>: Setzt den Identifikator der Anfrage (durch den
- Client verwendet um Anfragen auf Antworten abzubilden).</para></listitem>
- <listitem><para><code>getId()</code>: Empfängt den Anfrage Identifikator.</para></listitem>
- <listitem><para><code>setVersion($version)</code>: Setzt die Version der JSON-RPC Spezifikation
- der die Anfrage entspricht. Kann entweder '1.0' oder '2.0' sein.</para></listitem>
- <listitem><para><code>getVersion()</code>: Empfängt die Version der JSON-RPC Spezifikation die
- von der Anfrage verwendet wird.</para></listitem>
- <listitem><para><code>loadJson($json)</code>: Läde das Anfrageobjekt von einem JSON String.</para></listitem>
- <listitem><para><code>toJson()</code>: Stellt den JSON String als Anfrage dar.</para></listitem>
- </itemizedlist>
- <para>
- Eine HTTP spezifische Version ist über <classname>Zend_Json_Server_Request_Http</classname> vorhanden.
- Diese Klasse empfängt eine Anfrage über <code>php://input</code> und erlaubt den Zugriff
- auf die rohen JSON Daten über die <code>getRawJson()</code> Methode.
- </para>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserverresponse">
- <title>Zend_Json_Server_Response</title>
- <para>
- Der JSON-RPC Antwort Payload ist in ein <classname>Zend_Json_Server_Response</classname> Objekt
- gekapselt. Diese Objekt erlaubt es den Rückgabewert der Anfrage zu setzen, ob die Antwort
- ein Fehler ist oder nicht, den Anfrageindentifikator, die Version der JSON-RPC Spezifikation
- der die Antwort entspricht, und optional die Servicemap.
- </para>
- <para>
- Das Antwortobjekt bietet die folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem><para><code>setResult($value)</code>: Setzt das Ergebnis der Antwort.</para></listitem>
- <listitem><para><code>getResult()</code>: Empfängt das Antwortergebnis.</para></listitem>
- <listitem><para><code>setError(Zend_Json_Server_Error $error)</code>: Setzt ein Fehlerobjekt.
- Wenn es gesetzt wird, wird es als Antwort verwendet wenn JSON serialisiert wird.</para></listitem>
- <listitem><para><code>getError()</code>: Empfängt das Fehlerobjekt, wenn vorhanden.</para></listitem>
- <listitem><para><code>isError()</code>: Ob die Antwort eine Fehlerantwort ist oder nicht.</para></listitem>
- <listitem><para><code>setId($name)</code>: Setzt den Antwortindentifikator (damit der Client
- die Antwort mit der Originalanfrage in Verbindung bringt).</para></listitem>
- <listitem><para><code>getId()</code>: Empfängt den Antwortidentifikator.</para></listitem>
- <listitem><para><code>setVersion($version)</code>: Setzt die JSON-RPC Version der die
- Antwort entspricht.</para></listitem>
- <listitem><para><code>getVersion()</code>: Empfängt die JSON-RPC Version der die Antwort
- entspricht.</para></listitem>
- <listitem><para><code>toJson()</code>: Serialisiert die Antwort auf JSON. Wenn die Antwort
- eine Fehlerantwort ist, wird das Fehlerobjekt serialisiert.</para></listitem>
- <listitem><para><code>setServiceMap($serviceMap)</code>: Setzt das Servicemap Objekt für
- die Antwort.</para></listitem>
- <listitem><para><code>getServiceMap()</code>: Empfängt das Servicemap Objekt, wenn es
- vorhanden ist.</para></listitem>
- </itemizedlist>
- <para>
- Eine HTTP spezifische Version ist über <classname>Zend_Json_Server_Response_Http</classname> vorhanden.
- Diese Klasse wird entsprechende HTTP Header senden als auch die Antwort auf JSON zu
- serialisieren.
- </para>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonservererror">
- <title>Zend_Json_Server_Error</title>
- <para>
- JSON-RPC hat ein spezielles Format für das melden von Fehlerzuständen. Alle Fehler müssen
- mindestens, eine Fehlermeldung und einen Fehlercode anbieten; optional können Sie zusätzliche
- Daten, wie ein Backtrace, anbieten.
- </para>
- <para>
- Fehlercodes sind von jenen abgeleitet die vom
- <ulink url="http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php">vom XML-RPC EPI Projekt</ulink>
- empfohlen werden. <classname>Zend_Json_Server</classname> fügt den richtigen Code basierend auf der
- Fehlerkondition zu. Für Anwendungsausnahmen wird der Code '-32000' verwendet.
- </para>
- <para>
- <classname>Zend_Json_Server_Error</classname> bietet die folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem><para><code>setCode($code)</code>: Setzt den Fehlercode: Wenn der Code nicht im
- akzeptierten Bereich der XML-RPC Fehlercodes ist, wird -32000 hinzugefügt.</para></listitem>
- <listitem><para><code>getCode()</code>: Empfängt den aktuellen Fehlercode.</para></listitem>
- <listitem><para><code>setMessage($message)</code>: Setzt die Fehlernachricht.</para></listitem>
- <listitem><para><code>getMessage()</code>: Empfängt die aktuelle Fehlernachricht.</para></listitem>
- <listitem><para><code>setData($data)</code>: Setzt zusätzliche Daten die den Fehler
- genauer qualifizieren, wie ein Backtrace.</para></listitem>
- <listitem><para><code>getData()</code>: Empfängt alle aktuellen zusätzlichen Fehlerdaten.</para></listitem>
- <listitem><para><code>toArray()</code>: Weist den Fehler einem Array zu. Das Array enthält
- die Schlüssel 'code', 'message' und 'data'.</para></listitem>
- <listitem><para><code>toJson()</code>: Weist den Fehler einer JSON-RPC Fehlerrepräsentation
- zu.</para></listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserversmd">
- <title>Zend_Json_Server_Smd</title>
- <para>
- SMD steht für Service Mapping Description, ein JSON Schema das definiert wie ein Client mit
- einem speziellen Web Service interagieren kann. Zu der Zeit wie das geschrieben wurde, wurde
- die <ulink url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">Spezifikation</ulink>
- noch nicht formell ratifiziert, aber Sie ist bereits im Dojo Toolkit in Verwendung sowie in
- anderen JSON-RPC Kundenclients.
- </para>
- <para>
- Grundsätzlich bezeichnet eine Service Mapping Description die Methode des Transports (POST,
- GET, TCP/IP, usw.), den Envelopetyp der Anfrage (normalerweise basierend auf dem Protokoll
- des Servers), die ZielURL des Service Providers, und eine Mappe der vorhandenen Services.
- Im FAll von JSON-RPC ist die Service Mappe eine Liste von vorhandenen Methoden wobei jede
- Methode die vorhandenen Parameter und deren Typen beschreibt, sowie den erwarteten Typ des
- Rückgabewerts.
- </para>
- <para>
- <classname>Zend_Json_Server_Smd</classname> bietet einen Objektorientierten Weg um Service Mappen zu
- erstellen. Grundsätzlich werden Ihm Metadaten übergeben die den Service beschreiben indem
- Mutatoren verwendet und Services (Methoden und Funktionen) spezifiziert werden.
- </para>
- <para>
- Die Servicebeschreibungen selbst sind typischerweise Instanzen von
- <classname>Zend_Json_Server_Smd_Service</classname>; man kann genauso alle Informationen als Array an die
- verschiedenen Servicemutatoren in <classname>Zend_Json_Server_Smd</classname> übergeben, und es wird für
- einen ein Serviceobjekt instanziieren. Die Serviceobjekte enthalten Informationen wie den
- Namen des Services (typischerweise die Funktion oder den Methodennamen), die Parameter
- (Namen, Typen und Position), und den Typ des Rückgabewerts. Optionen kann jedes Service sein
- eigenes Ziel und Envelope haben, obwohl diese Funktionalität selten verwendet wird.
- </para>
- <para>
- <classname>Zend_Json_Server</classname> führt all das im Hintergrund durch, indem Reflektion auf den
- hinzugefügten Klassen und Funktionen verwendet wird; man sollte seine eigenen Service Maps
- erstellen wenn man eigene Funktionalitäten anbieten will die die Introspektion von Klassen und
- Funktionen nicht bieten kann.
- </para>
- <para>
- Die vorhandenen Methoden in <classname>Zend_Json_Server_Smd</classname> enthalten:
- </para>
- <itemizedlist>
- <listitem><para><code>setOptions(array $options)</code>: Erstelle ein SMD Objekt von einem
- Array an Optionen. Alle Mutatoren (Methoden die mit 'set' beginnen) können als
- Schlüssel verwendet werden.</para></listitem>
- <listitem><para><code>setTransport($transport)</code>: Setzt den Transport der für den
- Zugriff auf das Service verwendet werden soll; aktuell wird nur POST unterstützt.</para></listitem>
- <listitem><para><code>getTransport()</code>: Empfängt den aktuellen Transport des Services.</para></listitem>
- <listitem><para><code>setEnvelope($envelopeType)</code>: Setzt den aktuelle Anfrageenvelope
- der verwendet werden sollte um auf den Service zuzugreifen. Aktuell werden die
- Konstanten <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname> und
- <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname> verwendet.</para></listitem>
- <listitem><para><code>getEnvelope()</code>: Empfängt den aktuellen Anfrageenvelope.</para></listitem>
- <listitem><para><code>setContentType($type)</code>: Setzt den Contenttype den Anfragen
- verwenden sollten (standardmäßig ist das 'application/json').</para></listitem>
- <listitem><para><code>getContentType()</code>: Empfängt den aktuellen Contenttype für
- Anfragen an den Service.</para></listitem>
- <listitem><para><code>setTarget($target)</code>: Setzt den aktuellen URL Endpunkt für den
- Service.</para></listitem>
- <listitem><para><code>getTarget()</code>: Empfängt den URL Endpunkt für den Service.</para></listitem>
- <listitem><para><code>setId($id)</code>: Tpischerweise ist das der URL Endpunkt des
- Services (der selbe wie das Ziel).</para></listitem>
- <listitem><para><code>getId()</code>: Empfängt die ServiceID (typischerweise der URL Endpunkt
- des Services).</para></listitem>
- <listitem><para><code>setDescription($description)</code>: Setzt eine Servicebeschreibung
- (typischerweise nähere Informationen die den Zweck des Services beschreiben).</para></listitem>
- <listitem><para><code>getDescription()</code>: Empfängt die Servicebeschreibung.</para></listitem>
- <listitem><para><code>setDojoCompatible($flag)</code>: Setzt ein Flag das indiziert ob das SMD
- mit dem Dojo Toolkit kompatibel ist oder nicht. Wenn es true ist, dann ist das
- erzeugte JSON SMD so formatiert das es dem Format entspricht das Dojo's JSON-RPC
- Client erwartet.</para></listitem>
- <listitem><para><code>isDojoCompatible()</code>: Gibt den Wert des Dojokompatibilitätsflags
- zurück (Standardmäßig false).</para></listitem>
- <listitem><para><code>addService($service)</code>: Fügt ein Service der Mappe hinzu. Kann ein
- Array von Informationen sein die an den Konstruktor von
- <classname>Zend_Json_Server_Smd_Service</classname> übergeben werden, oder eine Instanz dieser
- Klasse.</para></listitem>
- <listitem><para><code>addServices(array $services)</code>: Fügt mehrere Services auf einmal
- hinzu.</para></listitem>
- <listitem><para><code>setServices(array $services)</code>: Fügt mehrere Serices auf einmal
- hinzu, und überschreibt alle vorher gesetzten Services.</para></listitem>
- <listitem><para><code>getService($name)</code>: Gibt ein Service durch seinen Namen zurück.</para></listitem>
- <listitem><para><code>getServices()</code>: Gibt alle hinzugefügten Services zurück.</para></listitem>
- <listitem><para><code>removeService($name)</code>: Entfernt ein Service von der Mappe.</para></listitem>
- <listitem><para><code>toArray()</code>: Weißt die Service Mappe einem Array zu.</para></listitem>
- <listitem><para><code>toDojoArray()</code>: Weißt die Service Mappe einem Array zu das
- mit dem Dojo Toolkit kompatibel ist.</para></listitem>
- <listitem><para><code>toJson()</code>: Weißt die Service Mappe einer JSON
- Repräsentation zu.</para></listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server_Smd_Service</classname> hat die folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem><para><code>setOptions(array $options)</code>: Setzt den Objektstatus durch ein
- Array. Jeder Mutator (Methoden die mit 'set' beginnen, kann als Schlüssel verwendet
- und über diese Methode gesetzt werden.</para></listitem>
- <listitem><para><code>setName($name)</code>: Setzt den Namen des Services (typischerweise
- die Funktion oder den Methodennamen).</para></listitem>
- <listitem><para><code>getName()</code>: Empfängt den Servicenamen.</para></listitem>
- <listitem><para><code>setTransport($transport)</code>: Setzt den Transport des Services
- (aktuell werden nur Transporte unterstützt die in
- <classname>Zend_Json_Server_Smd</classname> erlaubt sind).</para></listitem>
- <listitem><para><code>getTransport()</code>: Empfängt den aktuellen Transport.</para></listitem>
- <listitem><para><code>setTarget($target)</code>: Setzt den URL-Endpunkt des Services
- (typischerweise ist das der selbe wir im gesamten SMD welchem der Service hinzugefügt
- wird).</para></listitem>
- <listitem><para><code>getTarget()</code>: Gibt den URL Endpunkt des Services zurück.</para></listitem>
- <listitem><para><code>setEnvelope($envelopeType)</code>: Setzt den Serviceenvelope
- (aktuell werden nur Envelopes unterstützt die in
- <classname>Zend_Json_Server_Smd</classname> erlaubt sind).</para></listitem>
- <listitem><para><code>getEnvelope()</code>: Empfängt den Typ des Serviceenvelopes.</para></listitem>
- <listitem><para><code>addParam($type, array $options = array(), $order = null)</code>:
- Fügt dem Service einen Parameter hinzu. Standardmäßig ist nur der Parametertyp
- notwendig. Trotzdem kann die Reihenfolge spezifiziert werden sowie auch Optionen wie:</para>
- <itemizedlist>
- <listitem><para><emphasis>name</emphasis>: Der Name des Parameters</para></listitem>
- <listitem><para><emphasis>optional</emphasis>: Ob der Parameter optional ist oder nicht</para></listitem>
- <listitem><para><emphasis>default</emphasis>: Ein Standardwert für diesen Parameter</para></listitem>
- <listitem><para><emphasis>description</emphasis>: Ein Text der den Parameter beschreibt</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para><code>addParams(array $params)</code>: Fügt verschiedene Parameter auf einmal
- hinzu; jeder Parameter sollte ein Assoziatives Array sein das mindestens den Schlüssel
- 'type' enthält welches den Typ des Parameters beschreibt, und optinal den Schlüssel 'order';
- jeden andere Schlüssel wird als <code>$options</code> an <code>addOption()</code> übergeben.</para></listitem>
- <listitem><para><code>setParams(array $params)</code>: Setzt viele Parameter aus einmal,
- überschreibt alle aktuellen Parameter auf einmal.</para></listitem>
- <listitem><para><code>getParams()</code>: Empfängt alle aktuell gesetzten Parameter.</para></listitem>
- <listitem><para><code>setReturn($type)</code>: Setzt den Type des Rückgabewertes des Services.</para></listitem>
- <listitem><para><code>getReturn()</code>: Empfängt den Typ des Rückgabewertes des Services.</para></listitem>
- <listitem><para><code>toArray()</code>: Weist das Service an ein Array zu.</para></listitem>
- <listitem><para><code>toJson()</code>: Weist das Service einer JSON Repräsentation zu.</para></listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|