<?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 PHP 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 API 
        PHP 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 
        PHP 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. <methodname>$options</methodname> 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 URL 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 URL para el servicio.</para></listitem>
                <listitem><para><methodname>getTarget()</methodname>: Obtener el punto final 
                        de la URL para el servicio.</para></listitem>
                <listitem><para><methodname>setId($id)</methodname>: Normalmente, este es el 
                        punto final de la URL del servicio (igual que el 
                        objetivo).</para></listitem>
                <listitem><para><methodname>getId()</methodname>: Recuperar el ID del servicio 
                        (normalmente el punto final de la URL 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 URL 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 URL 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 
                    <methodname>$options</methodname> 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>
<!--
vim:se ts=4 sw=4 et:
-->
