| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- 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 HTTP, 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 HTTP 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 HTTP está disponible a través de
- <classname>Zend_Json_Server_Response_Http</classname>. Esta
- clase enviará las cabeceras HTTP apropiadas así como serializará
- la respuesta como JSON. </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
- <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname>
- y
- <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname>.</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 JSON
- 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 JSON.</para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- </sect1>
|