| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 19477 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.json.server">
- <title>Zend_Json_Server - servidor JSON-RPC</title>
- <para>
- <classname>Zend_Json_Server</classname>
- es una implementación del
- servidor
- <ulink url="http://groups.google.com/group/json-rpc/">JSON-RPC</ulink>
- Soporta tanto la versión 1 de la especificación
- <ulink url="http://json-rpc.org/wiki/specification">JSON-RPC</ulink>
- así como la especificación de la
- <ulink url="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">versión
- 2</ulink>
- ; además, provee una implementación de
- <acronym>PHP</acronym>
- de la especificación del
- <ulink url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">Service
- Mapping Description (SMD)</ulink>
- para prestar un servicio
- de metadatos a consumidores del servicio.
- </para>
- <para>
- JSON-RPC es un protocolo liviano de Remote Procedure Call que utiliza
- JSON para envolver sus
- mensajes. Esta implementación JSON-RPC sigue la
- <acronym>API</acronym>
- <acronym>PHP</acronym>
- de
- <ulink url="http://us.php.net/manual/en/function.soap-soapserver-construct.php">SoapServer</ulink>
- . Esto significa que, en una situación típica,
- simplemente:
- </para>
- <itemizedlist>
- <listitem>
- <para>Instancia el objeto servidor</para>
- </listitem>
- <listitem>
- <para>Agrega una o más funciones y/o clases/objetos al objeto
- servidor para</para>
- </listitem>
- <listitem>
- <para>handle() -- maneja -- el requerimiento</para>
- </listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server</classname>
- utiliza
- <xref linkend="zend.server.reflection"/>
- para realizar reflexión sobre
- cualquiera de las clases o funciones agregadas, y utiliza esa
- información para construir tanto la SMD y hacer cumplir el método de
- llamado de firmas. Como
- tal, es imperativo que cualquier de las
- funciones agregadas y/o los métodos de clase tengan
- mínimamente una
- plena documentación de
- <acronym>PHP</acronym>
- docblocks:
- </para>
- <itemizedlist>
- <listitem>
- <para>Todos los parámetros y sus tipos de variables esperados</para>
- </listitem>
- <listitem>
- <para>El tipo de variable del valor de retorno</para>
- </listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server</classname>
- escucha por solicitudes POST
- únicamente en este momento; afortunadamente, la mayoría de las
- implementaciones del cliente JSON-RPC en los medios en el momento de
- escribir esto, sólo
- requieren a POST como es. Esto hace que sea fácil de
- utilizar el mismo punto final del
- servidor para manejar a ambas
- peticiones así como para entregar el servicio SMD, como se
- muestra en el
- siguiente ejemplo.
- </para>
- <example id="zend.json.server.usage">
- <title>Uso de Zend_Json_Server</title>
- <para>Primero, definir una clase que queramos exponer vía servidor
- JSON-RPC. Vamos a la clase
- 'Calculator', y definir los métodos para
- 'add', 'subtract', 'multiply', y 'divide':</para>
- <programlisting language="php"><![CDATA[
- /**
- * Calculator - clase de ejemplo para exponer via JSON-RPC
- */
- class Calculator
- {
- /**
- * Devuelve la suma de dos variables
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function add($x, $y)
- {
- return $x + $y;
- }
- /**
- * Devuelve la diferencia de dos variables
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function subtract($x, $y)
- {
- return $x - $y;
- }
- /**
- * Devuelve el producto de dos variables
- *
- * @param int $x
- * @param int $y
- * @return int
- */
- public function multiply($x, $y)
- {
- return $x * $y;
- }
- /**
- * Devuelve la división de dos variables
- *
- * @param int $x
- * @param int $y
- * @return float
- */
- public function divide($x, $y)
- {
- return $x / $y;
- }
- }
- ]]></programlisting>
- <para>
- Nótese que cada método tiene un docblock con entradas indicando
- cada parámetro y su tipo,
- así como una entrada para el valor de
- retorno. Esto es
- <emphasis>absolutamente crítico</emphasis>
- cuando
- se usa
- <classname>Zend_Json_Server</classname>
- -- o cualquier otro
- componente del servidor en Zend Framework, por esa cuestión.
- </para>
- <para>Ahora, crearemos un script para manejar las peticiones:</para>
- <programlisting language="php"><![CDATA[
- $server = new Zend_Json_Server();
- // Indicar que funcionalidad está disponible:
- $server->setClass('Calculator');
- // Manejar el requerimiento:
- $server->handle();
- ]]></programlisting>
- <para>
- Sin embargo, esto no soluciona el problema de devolución de un
- SMD para que el cliente
- JSON-RPC pueda autodescubrir los métodos.
- Esto puede lograrse determinando el método del
- requerimiento
- <acronym>HTTP</acronym>
- , y
- luego especificando algún servidor de metadatos:
- </para>
- <programlisting language="php"><![CDATA[
- $server = new Zend_Json_Server();
- $server->setClass('Calculator');
- if ('GET' == $_SERVER['REQUEST_METHOD']) {
- // Indica el punto final de la URL, y la versión en uso de JSON-RPC:
- $server->setTarget('/json-rpc.php')
- ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
- // Capturar el SMD
- $smd = $server->getServiceMap();
- // Devolver el SMD al cliente
- header('Content-Type: application/json');
- echo $smd;
- return;
- }
- $server->handle();
- ]]></programlisting>
- <para>Si utiliza el servidor JSON-RPC con Dojo toolkit, también
- necesitará establecer un flag
- de compatibilidad especial para
- garantizar que los dos interoperen correctamente:</para>
- <programlisting language="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();
- // Establecer la compatibilidad con Dojo:
- $smd->setDojoCompatible(true);
- header('Content-Type: application/json');
- echo $smd;
- return;
- }
- $server->handle();
- ]]></programlisting>
- </example>
- <sect2 id="zend.json.server.details">
- <title>Detalles Avanzados</title>
- <para>
- Aunque la mayor funcionalidad de
- <classname>Zend_Json_Server</classname>
- se puntualiza en
- <xref linkend="zend.json.server.usage"/>
- , hay más funcionalidad
- avanzada disponible.
- </para>
- <sect3 id="zend.json.server.details.zendjsonserver">
- <title>Zend_Json_Server</title>
- <para>
- <classname>Zend_Json_Server</classname>
- es la clase núcleo en la
- propuesta JSON-RPC; que maneja todas las peticiones y como
- respuesta devuelve un conjunto de datos. Tiene los siguientes
- métodos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addFunction($function)</methodname>
- :
- Especifica la función de espacio del usuario para
- agregar al servidor.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setClass($class)</methodname>
- : Especifica
- una clase u objeto para agregar al servidor; todos los
- métodos
- públicos de ese item serán expuestos como
- métodos JSON-RPC.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>fault($fault = null, $code = 404, $data =
- null)</methodname>
- : Crea y devuelve un objeto
- <classname>Zend_Json_Server_Error</classname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>handle($request = false)</methodname>
- :
- Maneja una solicitud JSON-RPC; opcionalmente, pasa un
- objeto
- <classname>Zend_Json_Server_Request</classname>
- a
- utlizar (crea uno por defecto).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFunctions()</methodname>
- : Devuelve una
- lista de todos los métodos agregados.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setRequest(Zend_Json_Server_Request
- $request)</methodname>
- : Especifica un objeto
- solicitud para el servidor a utilizar.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getRequest()</methodname>
- : Recupera el
- objeto solicitud usado por el servidor.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setResponse(Zend_Json_Server_Response
- $response)</methodname>
- : Establece el objeto
- respuesta para el servidor a utilizar.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getResponse()</methodname>
- : Recupera el
- objeto respuesta usado por el servidor.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setAutoEmitResponse($flag)</methodname>
- :
- Indica si el servidor debería emitir automáticamente la
- respuesta y todas
- las cabeceras; por defecto, esto es
- verdadero.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>autoEmitResponse()</methodname>
- : Determina
- si la auto-emisión de la respuesta está
- habilitada.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getServiceMap()</methodname>
- : Recupera la
- descripción del mapa de servicio en el form de un objeto
- <classname>Zend_Json_Server_Smd</classname>
- .
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserverrequest">
- <title>Zend_Json_Server_Request</title>
- <para>
- El medio ambiente de una solicitud JSON-RPC está encapsulado
- en el objeto
- <classname>Zend_Json_Server_Request</classname>
- .
- Este objeto le permite establecer porciones necesarias de la
- solicitud JSON-RPC,
- incluida el ID de la solicitud, parámetros y
- especificaciones de la versión JSON-RPC.
- Tiene la capacidad de
- cargarse a sí mismo via JSON o un conjunto de opciones, y puede
- mostrase a si mismo como JSON vía el método
- <methodname>toJson()</methodname>
- .
- </para>
- <para>El objeto solicitud tiene los siguientes métodos disponibles:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setOptions(array $options)</methodname>
- :
- Especifica la configuración del objeto.
- <varname>$options</varname>
- puede contener claves
- que concuerden con cualuier método 'set':
- <methodname>setParams()</methodname>
- ,
- <methodname>setMethod()</methodname>
- ,
- <methodname>setId()</methodname>
- , y
- <methodname>setVersion()</methodname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addParam($value, $key =
- null)</methodname>
- : Agrega un parámetro para usar con el
- método de llamada. Los parámetros
- pueden ser sólo los
- valores, o pueden incluir opcionalmente el nombre del
- parámetro.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addParams(array $params)</methodname>
- :
- Agrega múltiples parámetros a la vez; proxies a
- <methodname>addParam()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setParams(array $params)</methodname>
- :
- Establece todos los parámetros a la vez; sobrescribe
- cualquiera de los
- parámetros existentes.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getParam($index)</methodname>
- : Recupera un
- parámetro por posición o por el nombre.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getParams()</methodname>
- : Recupera todos
- los parámetros a la vez.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setMethod($name)</methodname>
- : Establece
- el método para llamar.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getMethod()</methodname>
- : Recupera el
- método que será llamado.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>isMethodError()</methodname>
- : Determinar
- si la solicitud está malformada o no y si daría como
- resultado un
- error.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setId($name)</methodname>
- : Establecer el
- identificador de solicitud(utilizado por el cliente para
- igualar las solicitudes de respuestas).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getId()</methodname>
- : Recuperar el
- identificador de solicitudes.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setVersion($version)</methodname>
- :
- Establecer la versión de la especificación JSON-RPC que
- conforma la
- solicitud. Puede ser '1.0' o '2.0'.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getVersion()</methodname>
- : Recuperar la
- versión de la especificación JSON-RPC utilizados por la
- solicitud.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>loadJson($json)</methodname>
- : Cargar el
- objeto solicitud de una cadena JSON.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname>
- : Mostrar la
- solicitud como un string JSON.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Una versión específica de
- <acronym>HTTP</acronym>
- está disponible a través de
- <classname>Zend_Json_Server_Request_Http</classname>
- . Esta
- clase podrá recuperar la solicitud via
- <methodname>php://input</methodname>
- , y permite el acceso
- JSON sin procesar vía el método
- <methodname>getRawJson()</methodname>
- .
- </para>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserverresponse">
- <title>Zend_Json_Server_Response</title>
- <para>
- La respuesta del conjunto de datos JSON-RPC es encapsulada en
- el objeto
- <classname>Zend_Json_Server_Response</classname>
- . Este
- objeto le permite ajustar el valor de retorno de la solicitud,
- siendo la
- respuesta un error o no, el identificador de
- solicitud, con que versión de
- especificación esta conformada la
- respuesta de JSON-RPC, y, opcionalmente el mapa de
- servicio.
- </para>
- <para>El objeto respuesta tiene los siguientes métodos disponibles:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setResult($value)</methodname>
- : Establecer
- el resultado de la respuesta.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getResult()</methodname>
- : Recuperar el
- resultado de la respuesta.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setError(Zend_Json_Server_Error
- $error)</methodname>
- : Establecer un objeto error. Si
- ya está, este será utilizado como la
- respuesta cuando se
- serialize a JSON.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getError()</methodname>
- : Recuperar el
- objeto error, si lo hubiera.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>isError()</methodname>
- : Si la respuesta es
- una respuesta de error o no.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setId($name)</methodname>
- : Establecer el
- identificador de solicitud (de manera que la respuesta
- del
- cliente pueda coincidir con la solicitud original).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getId()</methodname>
- : Recuperar el
- identificador de solicitud.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setVersion($version)</methodname>
- :
- Establecer la versión JSON-RPC con la que deba estar
- conformada la
- respuesta.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getVersion()</methodname>
- : Recuperar la
- versión JSON-RPC con la cumple la respuesta.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname>
- : Serializar la
- respuesta a JSON. Si la respuesta es una respuesta de
- error,
- serializar el objeto error.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setServiceMap($serviceMap)</methodname>
- :
- Establecer el objeto mapa de servicio para la respuesta.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getServiceMap()</methodname>
- : Recuperar el
- objeto mapa de servicio, si hubiera alguno.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Una versión específica de
- <acronym>HTTP</acronym>
- está disponible a través de
- <classname>Zend_Json_Server_Response_Http</classname>
- . Esta
- clase enviará las cabeceras
- <acronym>HTTP</acronym>
- apropiadas así como serializará
- la respuesta como
- <acronym>JSON</acronym>
- .
- </para>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonservererror">
- <title>Zend_Json_Server_Error</title>
- <para>JSON-RPC tiene un formato especial para informar condiciones
- de error. Todos los
- errores necesitan proporcionar, mínimamente,
- un mensaje de error y un código de
- error; opcionalmente, pueden
- proporcionar datos adicionales, tales como un backtrace.</para>
- <para>
- Los códigos de error derivan de los recomendados por
- <ulink url="http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php">el
- proyecto XML-RPC EPI</ulink>
- .
- <classname>Zend_Json_Server</classname>
- apropiadamente
- asigna el código sobre la base de la condición de error. Para
- las
- excepciones de la aplicación, se utiliza el código '-32000'.
- </para>
- <para>
- <classname>Zend_Json_Server_Error</classname>
- expone los
- siguientes métodos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setCode($code)</methodname>
- : Establece el
- código de error; si el código de error no está en el
- rango de
- aceptación de XML-RPC, -32000 será
- asignado.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getCode()</methodname>
- : Recuperar el
- actual código de error.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setMessage($message)</methodname>
- :
- Establecer el mensaje de error.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getMessage()</methodname>
- : Recuperar el
- mensaje de error actual.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setData($data)</methodname>
- : Establecer el
- conjunto de datos auxiliares para calificar más adelante
- el
- error, tal como un backtrace.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getData()</methodname>
- : Recuperar
- cualquier auxiliar actual de errores de datos.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toArray()</methodname>
- : Mandar el error a
- un array. El array contendrá las claves 'code',
- 'message', y 'data'.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname>
- : Mandar el error a
- una representación de error JSON-RPC.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.json.server.details.zendjsonserversmd">
- <title>Zend_Json_Server_Smd</title>
- <para>
- SMD quiere decir Service Mapping Description, un esquema JSON
- que define cómo un
- cliente puede interactuar con un servicio web
- en particular. En el momento de
- escribir esto, la
- <ulink
- url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal"
- >especificación</ulink>
- todavía no ha sido ratificada
- oficialmente, pero ya está en uso en Dojo toolkit así
- como en
- otros clientes consumidores de JSON-RPC.
- </para>
- <para>
- En su aspecto más básico, un SMD indica el método de
- transporte (POST, GET, TCP/IP,
- etc), el tipo de envoltura de la
- solicitud (generalmente se basa en el protocolo del
- servidor),
- el objetivo
- <acronym>URL</acronym>
- del proveedor del servicio, y
- un mapa de los servicios disponibles. En el caso de
- JSON-RPC, el
- servicio de mapa es una lista de los métodos disponibles, en el
- que cada
- método documenta los parámetros disponibles y sus
- tipos, así como los tipos de
- valores esperados a devolver.
- </para>
- <para>
- <classname>Zend_Json_Server_Smd</classname>
- Proporciona un
- objeto orientado para construir servicios de mapas. Básicamente,
- pasa
- los metadatos describiendo el servicio usando mutators, y
- especifica los servicios
- (métodos y funciones).
- </para>
- <para>
- Las descripciones de los servicios son típicamente instancias
- de
- <classname>Zend_Json_Server_Smd_Service</classname>
- ; también
- puede pasar toda la información como un array a los diversos
- mutators de
- servicios en
- <classname>Zend_Json_Server_Smd</classname>
- , y que
- instanciará on objeto de servicio por usted. Los objetos de
- servicio contienen
- información como el nombre del servicio
- (típicamente, la función o el nombre del
- método), los parámetros
- (nombres, tipos y posición), y el tipo del valor de retorno.
- Opcionalmente, cada servicio puede tener su propio objetivo y
- envoltura, aunque esta
- funcionalidad rara vez es utilizada.
- </para>
- <para>
- <classname>Zend_Json_Server</classname>
- Realmente todo esto
- sucede entre bambalinas para usted, utilizando reflexión sobre
- las clases y funciones agregadas; debe crear su propio servicio
- de mapas sólo si
- necesita brindar funcionalidad personalizada
- que la introspección de clase y función
- no puede ofrecer.
- </para>
- <para>
- Los métodos disponibles en
- <classname>Zend_Json_Server_Smd</classname>
- incluyen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setOptions(array $options)</methodname>
- :
- Establecer un objeto SMD desde un array de opciones.
- Todos los mutators
- (métodos comenzando con 'set') se
- pueden usar como claves.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setTransport($transport)</methodname>
- :
- Establecer el transporte usado para acceder al servicio;
- únicamente POST es
- actualmente soportado.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getTransport()</methodname>
- : Obtener el
- servicio de transporte actual.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setEnvelope($envelopeType)</methodname>
- :
- Establecer la envoltura de la solicitud que debería ser
- utilizada para
- acceder al servicio. Actualmente las
- constantes soportadas son
- <constant>Zend_Json_Server_Smd::ENV_JSONRPC_1</constant>
- y
- <constant>Zend_Json_Server_Smd::ENV_JSONRPC_1</constant>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getEnvelope()</methodname>
- : Obtener la
- envoltura de la petición actual.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setContentType($type)</methodname>
- :
- Establecer el tipo de contenido que deben utilizar las
- solicitudes (por
- defecto, es 'application/json»).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getContentType()</methodname>
- : Conseguir
- el tipo del contenido actual para las solicitudes al
- servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setTarget($target)</methodname>
- :
- Establecer el punto final de la
- <acronym>URL</acronym>
- para el servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getTarget()</methodname>
- : Obtener el punto
- final de la
- <acronym>URL</acronym>
- para el
- servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setId($id)</methodname>
- : Normalmente, este
- es el punto final de la
- <acronym>URL</acronym>
- del
- servicio (igual que el objetivo).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getId()</methodname>
- : Recuperar el ID del
- servicio (normalmente el punto final de la
- <acronym>URL</acronym>
- del servicio).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setDescription($description)</methodname>
- :
- Establecer una descripción del servicio (típicamente
- información narrativa
- que describe el propósito del
- servicio).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDescription()</methodname>
- : Obtener la
- descripción del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setDojoCompatible($flag)</methodname>
- :
- Establecer un flag que indique si el SMD es compatible o
- no con el toolkit
- de Dojo. Cuando sea verdadero, el
- <acronym>JSON</acronym>
- SMD será formateado para cumplir con el formato que
- espera el cliente de Dojo
- JSON-RPC.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>isDojoCompatible()</methodname>
- : Devuelve
- el valor del flag de compatibilidad de Dojo (falso, por
- defecto).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addService($service)</methodname>
- : Añade
- un servicio al mapa. Puede ser un array de información a
- pasar al
- constructor de
- <classname>Zend_Json_Server_Smd_Service</classname>
- ,
- o una instancia de esa clase.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addServices(array $services)</methodname>
- :
- Agrega múltiples servicios a la vez.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setServices(array $services)</methodname>
- :
- Agrega múltiples servicios a la vez, sobreescribiendo
- cualquiera de los
- servicios previamente establecidos.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getService($name)</methodname>
- : Ontiene el
- servicio por su nombre.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getServices()</methodname>
- : Obtener todos
- los servicios agregados.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>removeService($name)</methodname>
- : Elimina
- un servicio del mapa.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toArray()</methodname>
- : Mandar el mapa de
- servicio a un array.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toDojoArray()</methodname>
- : Mandar el mapa
- de servicio a un array compatible con Dojo
- Toolkit.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname>
- : Mandar el mapa de
- servicio a una representación JSON.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Json_Server_Smd_Service</classname>
- tiene los
- siguientes métodos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setOptions(array $options)</methodname>
- :
- Establecer el estado del objeto dede un array. Cualquier
- mutator (métodos
- comenzando con 'set') puede ser
- utilizado como una clave y establecerlo
- mediante este
- método.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setName($name)</methodname>
- : Establecer el
- nombre del servicio (típicamente, la función o el nombre
- del
- método).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getName()</methodname>
- : Recuperar el
- nombre del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setTransport($transport)</methodname>
- :
- Establecer el servicio de transporte (actualmente, sólo
- transportes apoyados
- por
- <classname>Zend_Json_Server_Smd</classname>
- son
- permitidos).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getTransport()</methodname>
- : Recuperar el
- transporte actual.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setTarget($target)</methodname>
- :
- Establecer el punto final de la
- <acronym>URL</acronym>
- del servicio (típicamente, este será el mismo que el SMD
- en general, al cual
- el servicio está agregado).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getTarget()</methodname>
- : Obtener el punto
- final de la
- <acronym>URL</acronym>
- del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setEnvelope($envelopeType)</methodname>
- :
- Establecer la envoltura del servicio (actualmente, sólo
- se permiten las
- envolturas soportadas por
- <classname>Zend_Json_Server_Smd</classname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getEnvelope()</methodname>
- : Recuperar el
- tipo de envoltura del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addParam($type, array $options = array(),
- $order = null)</methodname>
- : Añadir un parámetro
- para el servicio. Por defecto, sólo el tipo de
- parámetro
- es necesario. Sin embargo, también puede especificar el
- orden, así
- como opciones tales como:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>name</emphasis>
- : el nombre del
- parámetro
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>optional</emphasis>
- : cuándo el
- parámetro es opcional o no
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>default</emphasis>
- : un valor por
- defecto para el parámetro
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>description</emphasis>
- : texto
- describiendo el parámetro
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>addParams(array $params)</methodname>
- :
- Agregar varios parámetros a la vez; cada param debería
- ser un array
- asociativo conteniendo mínimamente la clave
- 'type' describiendo el tipo de
- parámetro y,
- opcionalmente la clave 'order'; cualquiera de las otras
- claves
- serán pasados como
- <varname>$options</varname>
- a
- <methodname>addOption()</methodname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setParams(array $params)</methodname>
- :
- Establecer muchos parámetros a la vez, sobrescribiendo
- cualquiera de los
- parámetros existentes.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getParams()</methodname>
- : Recuperar todos
- los parámetros actualmente establecidos.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setReturn($type)</methodname>
- : Establecer
- el tipo del valor de retorno del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getReturn()</methodname>
- : Obtener el tipo
- del valor de retorno del servicio.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toArray()</methodname>
- : Mandar el servicio
- a un array.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname>
- : Mandar el servicio
- a una representación
- <acronym>JSON</acronym>
- .
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- </sect1>
|