| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20792 -->
- <!-- 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
- <constant>TRUE</constant>. </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 (<constant>FALSE</constant>, 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>
|