Zend_Json-Server.xml 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.json.server">
  4. <title>Zend_Json_Server - servidor JSON-RPC</title>
  5. <para>
  6. <classname>Zend_Json_Server</classname> es una implementación del
  7. servidor <ulink
  8. url="http://groups.google.com/group/json-rpc/">JSON-RPC</ulink>
  9. Soporta tanto la versión 1 de la especificación
  10. <ulink url="http://json-rpc.org/wiki/specification">JSON-RPC</ulink>
  11. así como la especificación de la
  12. <ulink url="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">versión 2</ulink>;
  13. además, provee una implementación de PHP de la especificación del
  14. <ulink url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">Service
  15. Mapping Description (SMD)</ulink>
  16. para prestar un servicio de metadatos a consumidores del servicio.
  17. </para>
  18. <para>
  19. JSON-RPC es un protocolo liviano de Remote Procedure Call que utiliza JSON
  20. para envolver sus mensajes. Esta implementación JSON-RPC sigue la API
  21. PHP de <ulink
  22. url="http://us.php.net/manual/en/function.soap-soapserver-construct.php">SoapServer</ulink>.
  23. Esto significa que, en una situación típica, simplemente:
  24. </para>
  25. <itemizedlist>
  26. <listitem><para>Instancia el objeto servidor</para></listitem>
  27. <listitem><para>Agrega una o más funciones y/o clases/objetos al objeto
  28. servidor para</para></listitem>
  29. <listitem><para>handle() -- maneja -- el requerimiento</para></listitem>
  30. </itemizedlist>
  31. <para>
  32. <classname>Zend_Json_Server</classname> utiliza <xref linkend="zend.server.reflection" />
  33. para realizar reflexión sobre cualquiera de las clases o funciones
  34. agregadas, y utiliza esa información para construir tanto la SMD y
  35. hacer cumplir el método de llamado de firmas.
  36. Como tal, es imperativo que cualquier de las funciones agregadas y/o
  37. los métodos de clase tengan mínimamente una plena documentación de
  38. PHP docblocks:
  39. </para>
  40. <itemizedlist>
  41. <listitem><para>Todos los parámetros y sus tipos de variables esperados</para></listitem>
  42. <listitem><para>El tipo de variable del valor de retorno</para></listitem>
  43. </itemizedlist>
  44. <para>
  45. <classname>Zend_Json_Server</classname> escucha por solicitudes POST
  46. únicamente en este momento; afortunadamente, la mayoría de las
  47. implementaciones del cliente JSON-RPC en los medios en el momento de
  48. escribir esto, sólo requieren a POST como es.
  49. Esto hace que sea fácil de utilizar el mismo punto final del servidor
  50. para manejar a ambas peticiones así como para entregar el servicio SMD,
  51. como se muestra en el siguiente ejemplo.
  52. </para>
  53. <example id="zend.json.server.usage">
  54. <title>Uso de Zend_Json_Server</title>
  55. <para>
  56. Primero, definir una clase que queramos exponer vía servidor JSON-RPC.
  57. Vamos a la clase 'Calculator', y definir los métodos para
  58. 'add', 'subtract', 'multiply', y 'divide':
  59. </para>
  60. <programlisting role="php"><![CDATA[
  61. /**
  62. * Calculator - clase de ejemplo para exponer via JSON-RPC
  63. */
  64. class Calculator
  65. {
  66. /**
  67. * Devuelve la suma de dos variables
  68. *
  69. * @param int $x
  70. * @param int $y
  71. * @return int
  72. */
  73. public function add($x, $y)
  74. {
  75. return $x + $y;
  76. }
  77. /**
  78. * Devuelve la diferencia de dos variables
  79. *
  80. * @param int $x
  81. * @param int $y
  82. * @return int
  83. */
  84. public function subtract($x, $y)
  85. {
  86. return $x - $y;
  87. }
  88. /**
  89. * Devuelve el producto de dos variables
  90. *
  91. * @param int $x
  92. * @param int $y
  93. * @return int
  94. */
  95. public function multiply($x, $y)
  96. {
  97. return $x * $y;
  98. }
  99. /**
  100. * Devuelve la división de dos variables
  101. *
  102. * @param int $x
  103. * @param int $y
  104. * @return float
  105. */
  106. public function divide($x, $y)
  107. {
  108. return $x / $y;
  109. }
  110. }
  111. ]]></programlisting>
  112. <para>
  113. Nótese que cada método tiene un docblock con entradas indicando cada
  114. parámetro y su tipo, así como una entrada para el valor de retorno.
  115. Esto es <emphasis>absolutamente crítico</emphasis> cuando se usa
  116. <classname>Zend_Json_Server</classname> -- o cualquier otro
  117. componente del servidor en Zend Framework, por esa cuestión.
  118. </para>
  119. <para>
  120. Ahora, crearemos un script para manejar las peticiones:
  121. </para>
  122. <programlisting role="php"><![CDATA[
  123. $server = new Zend_Json_Server();
  124. // Indicar que funcionalidad está disponible:
  125. $server->setClass('Calculator');
  126. // Manejar el requerimiento:
  127. $server->handle();
  128. ]]></programlisting>
  129. <para>
  130. Sin embargo, esto no soluciona el problema de devolución de un SMD
  131. para que el cliente JSON-RPC pueda autodescubrir los métodos.
  132. Esto puede lograrse determinando el método del requerimiento HTTP,
  133. y luego especificando algún servidor de metadatos:
  134. </para>
  135. <programlisting role="php"><![CDATA[
  136. $server = new Zend_Json_Server();
  137. $server->setClass('Calculator');
  138. if ('GET' == $_SERVER['REQUEST_METHOD']) {
  139. // Indica el punto final de la URL, y la versión en uso de JSON-RPC:
  140. $server->setTarget('/json-rpc.php')
  141. ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  142. // Capturar el SMD
  143. $smd = $server->getServiceMap();
  144. // Devolver el SMD al cliente
  145. header('Content-Type: application/json');
  146. echo $smd;
  147. return;
  148. }
  149. $server->handle();
  150. ]]></programlisting>
  151. <para>
  152. Si utiliza el servidor JSON-RPC con Dojo toolkit, también necesitará
  153. establecer un flag de compatibilidad especial para garantizar
  154. que los dos interoperen correctamente:
  155. </para>
  156. <programlisting role="php"><![CDATA[
  157. $server = new Zend_Json_Server();
  158. $server->setClass('Calculator');
  159. if ('GET' == $_SERVER['REQUEST_METHOD']) {
  160. $server->setTarget('/json-rpc.php')
  161. ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  162. $smd = $server->getServiceMap();
  163. // Establecer la compatibilidad con Dojo:
  164. $smd->setDojoCompatible(true);
  165. header('Content-Type: application/json');
  166. echo $smd;
  167. return;
  168. }
  169. $server->handle();
  170. ]]></programlisting>
  171. </example>
  172. <sect2 id="zend.json.server.details">
  173. <title>Detalles Avanzados</title>
  174. <para>
  175. Aunque la mayor funcionalidad de <classname>Zend_Json_Server</classname> se
  176. puntualiza en <xref linkend="zend.json.server.usage" />, hay
  177. más funcionalidad avanzada disponible.
  178. </para>
  179. <sect3 id="zend.json.server.details.zendjsonserver">
  180. <title>Zend_Json_Server</title>
  181. <para>
  182. <classname>Zend_Json_Server</classname> es la clase núcleo en la
  183. propuesta JSON-RPC; que maneja todas las peticiones y como
  184. respuesta devuelve un conjunto de datos.
  185. Tiene los siguientes métodos:
  186. </para>
  187. <itemizedlist>
  188. <listitem><para><code>addFunction($function)</code>: Especifica
  189. la función de espacio del usuario para agregar al servidor.</para></listitem>
  190. <listitem><para><code>setClass($class)</code>: Especifica una
  191. clase u objeto para agregar al servidor; todos los métodos
  192. públicos de ese item serán expuestos como métodos JSON-RPC.</para></listitem>
  193. <listitem><para><code>fault($fault = null, $code = 404, $data =
  194. null)</code>: Crea y devuelve un objeto
  195. <classname>Zend_Json_Server_Error</classname>.</para></listitem>
  196. <listitem><para><code>handle($request = false)</code>: Maneja
  197. una solicitud JSON-RPC; opcionalmente, pasa un objeto
  198. <classname>Zend_Json_Server_Request</classname> a utlizar
  199. (crea uno por defecto).</para></listitem>
  200. <listitem><para><code>getFunctions()</code>: Devuelve una lista
  201. de todos los métodos agregados.</para></listitem>
  202. <listitem><para><code>setRequest(Zend_Json_Server_Request
  203. $request)</code>: Especifica un objeto solicitud para el
  204. servidor a utilizar.</para></listitem>
  205. <listitem><para><code>getRequest()</code>: Recupera el objeto
  206. solicitud usado por el servidor.</para></listitem>
  207. <listitem><para><code>setResponse(Zend_Json_Server_Response
  208. $response)</code>: Establece el objeto respuesta para el
  209. servidor a utilizar.</para></listitem>
  210. <listitem><para><code>getResponse()</code>: Recupera el objeto
  211. respuesta usado por el servidor.</para></listitem>
  212. <listitem><para><code>setAutoEmitResponse($flag)</code>:
  213. Indica si el servidor debería emitir automáticamente la
  214. respuesta y todas las cabeceras; por defecto, esto es
  215. verdadero.</para></listitem>
  216. <listitem><para><code>autoEmitResponse()</code>: Determina si la
  217. auto-emisión de la respuesta está habilitada.</para></listitem>
  218. <listitem><para><code>getServiceMap()</code>: Recupera la
  219. descripción del mapa de servicio en el form de un
  220. objeto
  221. <classname>Zend_Json_Server_Smd</classname>.</para></listitem>
  222. </itemizedlist>
  223. </sect3>
  224. <sect3 id="zend.json.server.details.zendjsonserverrequest">
  225. <title>Zend_Json_Server_Request</title>
  226. <para>
  227. El medio ambiente de una solicitud JSON-RPC está encapsulado en
  228. el objeto <classname>Zend_Json_Server_Request</classname>.
  229. Este objeto le permite establecer porciones necesarias de la
  230. solicitud JSON-RPC, incluida el ID de la solicitud, parámetros y
  231. especificaciones de la versión JSON-RPC. Tiene la capacidad de
  232. cargarse a sí mismo via JSON o un conjunto de opciones, y puede
  233. mostrase a si mismo como JSON vía el método <code>toJson()</code>.
  234. </para>
  235. <para>
  236. El objeto solicitud tiene los siguientes métodos disponibles:
  237. </para>
  238. <itemizedlist>
  239. <listitem><para><code>setOptions(array $options)</code>: Especifica
  240. la configuración del objeto. <code>$options</code> puede
  241. contener claves que concuerden con cualuier método 'set':
  242. <code>setParams()</code>, <code>setMethod()</code>,
  243. <code>setId()</code>, y
  244. <code>setVersion()</code>.</para></listitem>
  245. <listitem><para><code>addParam($value, $key = null)</code>:
  246. Agrega un parámetro para usar con el método de llamada.
  247. Los parámetros pueden ser sólo los valores, o pueden
  248. incluir opcionalmente el nombre del parámetro.
  249. </para></listitem>
  250. <listitem><para><code>addParams(array $params)</code>: Agrega
  251. múltiples parámetros a la vez; proxies a
  252. <code>addParam()</code></para></listitem>
  253. <listitem><para><code>setParams(array $params)</code>:
  254. Establece todos los parámetros a la vez; sobrescribe
  255. cualquiera de los parámetros existentes.</para></listitem>
  256. <listitem><para><code>getParam($index)</code>: Recupera un
  257. parámetro por posición o por el nombre.</para></listitem>
  258. <listitem><para><code>getParams()</code>: Recupera todos los
  259. parámetros a la vez.</para></listitem>
  260. <listitem><para><code>setMethod($name)</code>: Establece el
  261. método para llamar.</para></listitem>
  262. <listitem><para><code>getMethod()</code>: Recupera el método que
  263. será llamado.</para></listitem>
  264. <listitem><para><code>isMethodError()</code>: Determinar si la
  265. solicitud está malformada o no y si daría como resultado
  266. un error.</para></listitem>
  267. <listitem><para><code>setId($name)</code>: Establecer el
  268. identificador de solicitud(utilizado por el cliente
  269. para igualar las solicitudes de respuestas).</para></listitem>
  270. <listitem><para><code>getId()</code>: Recuperar el identificador
  271. de solicitudes.</para></listitem>
  272. <listitem><para><code>setVersion($version)</code>: Establecer la
  273. versión de la especificación JSON-RPC que conforma la
  274. solicitud. Puede ser '1.0' o '2.0'.</para></listitem>
  275. <listitem><para><code>getVersion()</code>: Recuperar la versión
  276. de la especificación JSON-RPC utilizados por la solicitud.
  277. </para></listitem>
  278. <listitem><para><code>loadJson($json)</code>: Cargar el objeto
  279. solicitud de una cadena JSON.</para></listitem>
  280. <listitem><para><code>toJson()</code>: Mostrar la solicitud como
  281. un string JSON.</para></listitem>
  282. </itemizedlist>
  283. <para>
  284. Una versión específica de HTTP está disponible a través de
  285. <classname>Zend_Json_Server_Request_Http</classname>. Esta clase
  286. podrá recuperar la solicitud via <code>php://input</code>, y
  287. permite el acceso JSON sin procesar vía el método
  288. <code>getRawJson()</code>.
  289. </para>
  290. </sect3>
  291. <sect3 id="zend.json.server.details.zendjsonserverresponse">
  292. <title>Zend_Json_Server_Response</title>
  293. <para>
  294. La respuesta del conjunto de datos JSON-RPC es encapsulada en el
  295. objeto <classname>Zend_Json_Server_Response</classname>.
  296. Este objeto le permite ajustar el valor de retorno de la
  297. solicitud, siendo la respuesta un error o no, el identificador
  298. de solicitud, con que versión de especificación esta conformada
  299. la respuesta de JSON-RPC, y, opcionalmente el mapa de servicio.
  300. </para>
  301. <para>
  302. El objeto respuesta tiene los siguientes métodos disponibles:
  303. </para>
  304. <itemizedlist>
  305. <listitem><para><code>setResult($value)</code>: Establecer el
  306. resultado de la respuesta.</para></listitem>
  307. <listitem><para><code>getResult()</code>: Recuperar el resultado
  308. de la respuesta.</para></listitem>
  309. <listitem><para><code>setError(Zend_Json_Server_Error
  310. $error)</code>: Establecer un objeto error. Si ya está, este
  311. será utilizado como la respuesta cuando se serialize a JSON.
  312. </para></listitem>
  313. <listitem><para><code>getError()</code>: Recuperar el objeto
  314. error, si lo hubiera.</para></listitem>
  315. <listitem><para><code>isError()</code>: Si la respuesta es una
  316. respuesta de error o no.</para></listitem>
  317. <listitem><para><code>setId($name)</code>: Establecer el
  318. identificador de solicitud (de manera que la respuesta
  319. del cliente pueda coincidir con la solicitud original).
  320. </para></listitem>
  321. <listitem><para><code>getId()</code>: Recuperar el identificador
  322. de solicitud.</para></listitem>
  323. <listitem><para><code>setVersion($version)</code>: Establecer la
  324. versión JSON-RPC con la que deba estar conformada la
  325. respuesta.</para></listitem>
  326. <listitem><para><code>getVersion()</code>: Recuperar la versión
  327. JSON-RPC con la cumple la respuesta.</para></listitem>
  328. <listitem><para><code>toJson()</code>: Serializar la respuesta a
  329. JSON. Si la respuesta es una respuesta de error,
  330. serializar el objeto error.</para></listitem>
  331. <listitem><para><code>setServiceMap($serviceMap)</code>:
  332. Establecer el objeto mapa de servicio para la respuesta.
  333. </para></listitem>
  334. <listitem><para><code>getServiceMap()</code>: Recuperar el objeto
  335. mapa de servicio, si hubiera alguno.</para></listitem>
  336. </itemizedlist>
  337. <para>
  338. Una versión específica de HTTP está disponible a través de
  339. <classname>Zend_Json_Server_Response_Http</classname>. Esta clase
  340. enviará las cabeceras HTTP apropiadas así como serializará la
  341. respuesta como JSON.
  342. </para>
  343. </sect3>
  344. <sect3 id="zend.json.server.details.zendjsonservererror">
  345. <title>Zend_Json_Server_Error</title>
  346. <para>
  347. JSON-RPC tiene un formato especial para informar condiciones de
  348. error. Todos los errores necesitan proporcionar, mínimamente,
  349. un mensaje de error y un código de error; opcionalmente, pueden
  350. proporcionar datos adicionales, tales como un backtrace.
  351. </para>
  352. <para>
  353. Los códigos de error derivan de los recomendados por <ulink
  354. url="http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php">el
  355. proyecto XML-RPC EPI</ulink>. <classname>Zend_Json_Server</classname>
  356. apropiadamente asigna el código sobre la base de la condición de
  357. error. Para las excepciones de la aplicación, se utiliza el
  358. código '-32000'.
  359. </para>
  360. <para>
  361. <classname>Zend_Json_Server_Error</classname> expone los
  362. siguientes métodos:
  363. </para>
  364. <itemizedlist>
  365. <listitem><para><code>setCode($code)</code>: Establece el código
  366. de error; si el código de error no está en el rango de
  367. aceptación de XML-RPC, -32000 será asignado.</para></listitem>
  368. <listitem><para><code>getCode()</code>: Recuperar el actual
  369. código de error.</para></listitem>
  370. <listitem><para><code>setMessage($message)</code>: Establecer el
  371. mensaje de error.</para></listitem>
  372. <listitem><para><code>getMessage()</code>: Recuperar el mensaje
  373. de error actual.</para></listitem>
  374. <listitem><para><code>setData($data)</code>: Establecer el conjunto
  375. de datos auxiliares para calificar más adelante el error,
  376. tal como un backtrace.</para></listitem>
  377. <listitem><para><code>getData()</code>: Recuperar cualquier
  378. auxiliar actual de errores de datos.</para></listitem>
  379. <listitem><para><code>toArray()</code>: Mandar el error a un
  380. array. El array contendrá las claves 'code', 'message',
  381. y 'data'.</para></listitem>
  382. <listitem><para><code>toJson()</code>: Mandar el error a una
  383. representación de error JSON-RPC.</para></listitem>
  384. </itemizedlist>
  385. </sect3>
  386. <sect3 id="zend.json.server.details.zendjsonserversmd">
  387. <title>Zend_Json_Server_Smd</title>
  388. <para>
  389. SMD quiere decir Service Mapping Description, un esquema JSON que
  390. define cómo un cliente puede interactuar con un servicio web en
  391. particular. En el momento de escribir esto, la <ulink
  392. url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">especificación</ulink>
  393. todavía no ha sido ratificada oficialmente, pero ya está en uso
  394. en Dojo toolkit así como en otros clientes consumidores de
  395. JSON-RPC.
  396. </para>
  397. <para>
  398. En su aspecto más básico, un SMD indica el método de transporte
  399. (POST, GET, TCP/IP, etc), el tipo de envoltura de la solicitud
  400. (generalmente se basa en el protocolo del servidor),
  401. el objetivo URL del proveedor del servicio, y un mapa de los
  402. servicios disponibles. En el caso de JSON-RPC, el servicio de mapa
  403. es una lista de los métodos disponibles, en el que cada método
  404. documenta los parámetros disponibles y sus tipos, así como los
  405. tipos de valores esperados a devolver.
  406. </para>
  407. <para>
  408. <classname>Zend_Json_Server_Smd</classname> Proporciona un objeto
  409. orientado para construir servicios de mapas.
  410. Básicamente, pasa los metadatos describiendo el servicio usando
  411. mutators, y especifica los servicios (métodos y funciones).
  412. </para>
  413. <para>
  414. Las descripciones de los servicios son típicamente instancias de
  415. <classname>Zend_Json_Server_Smd_Service</classname>; también
  416. puede pasar toda la información como un array a los diversos
  417. mutators de servicios en <classname>Zend_Json_Server_Smd</classname>,
  418. y que instanciará on objeto de servicio por usted.
  419. Los objetos de servicio contienen información como el nombre del
  420. servicio (típicamente, la función o el nombre del método), los
  421. parámetros (nombres, tipos y posición), y el tipo del valor de
  422. retorno. Opcionalmente, cada servicio puede tener su propio
  423. objetivo y envoltura, aunque esta funcionalidad rara vez es utilizada.
  424. </para>
  425. <para>
  426. <classname>Zend_Json_Server</classname> Realmente todo esto
  427. sucede entre bambalinas para usted, utilizando reflexión sobre
  428. las clases y funciones agregadas; debe crear su propio servicio
  429. de mapas sólo si necesita brindar funcionalidad personalizada que
  430. la introspección de clase y función no puede ofrecer.
  431. </para>
  432. <para>
  433. Los métodos disponibles en <classname>Zend_Json_Server_Smd</classname> incluyen:
  434. </para>
  435. <itemizedlist>
  436. <listitem><para><code>setOptions(array $options)</code>: Establecer
  437. un objeto SMD desde un array de opciones. Todos los
  438. mutators (métodos comenzando con 'set') se pueden usar
  439. como claves.</para></listitem>
  440. <listitem><para><code>setTransport($transport)</code>: Establecer
  441. el transporte usado para acceder al servicio; únicamente
  442. POST es actualmente soportado.</para></listitem>
  443. <listitem><para><code>getTransport()</code>: Obtener el servicio
  444. de transporte actual.</para></listitem>
  445. <listitem><para><code>setEnvelope($envelopeType)</code>:
  446. Establecer la envoltura de la solicitud que debería ser
  447. utilizada para acceder al servicio. Actualmente las
  448. constantes soportadas son
  449. <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname> y
  450. <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname>.</para></listitem>
  451. <listitem><para><code>getEnvelope()</code>: Obtener la envoltura
  452. de la petición actual.</para></listitem>
  453. <listitem><para><code>setContentType($type)</code>: Establecer
  454. el tipo de contenido que deben utilizar las solicitudes
  455. (por defecto, es 'application/json»).</para></listitem>
  456. <listitem><para><code>getContentType()</code>: Conseguir el
  457. tipo del contenido actual para las solicitudes al
  458. servicio.</para></listitem>
  459. <listitem><para><code>setTarget($target)</code>: Establecer el
  460. punto final de la URL para el servicio.</para></listitem>
  461. <listitem><para><code>getTarget()</code>: Obtener el punto final
  462. de la URL para el servicio.</para></listitem>
  463. <listitem><para><code>setId($id)</code>: Normalmente, este es el
  464. punto final de la URL del servicio (igual que el
  465. objetivo).</para></listitem>
  466. <listitem><para><code>getId()</code>: Recuperar el ID del servicio
  467. (normalmente el punto final de la URL del servicio).
  468. </para></listitem>
  469. <listitem><para><code>setDescription($description)</code>:
  470. Establecer una descripción del servicio (típicamente
  471. información narrativa que describe el propósito del
  472. servicio).</para></listitem>
  473. <listitem><para><code>getDescription()</code>: Obtener la
  474. descripción del servicio.</para></listitem>
  475. <listitem><para><code>setDojoCompatible($flag)</code>:
  476. Establecer un flag que indique si el SMD es compatible
  477. o no con el toolkit de Dojo. Cuando sea verdadero, el
  478. JSON SMD será formateado para cumplir con el formato que
  479. espera el cliente de Dojo JSON-RPC.</para></listitem>
  480. <listitem><para><code>isDojoCompatible()</code>: Devuelve el valor
  481. del flag de compatibilidad de Dojo (falso, por defecto).
  482. </para></listitem>
  483. <listitem><para><code>addService($service)</code>: Añade un
  484. servicio al mapa. Puede ser un array de información a
  485. pasar al constructor de
  486. <classname>Zend_Json_Server_Smd_Service</classname>, o
  487. una instancia de esa clase.</para></listitem>
  488. <listitem><para><code>addServices(array $services)</code>:
  489. Agrega múltiples servicios a la vez.</para></listitem>
  490. <listitem><para><code>setServices(array $services)</code>:
  491. Agrega múltiples servicios a la vez, sobreescribiendo
  492. cualquiera de los servicios previamente establecidos.
  493. </para></listitem>
  494. <listitem><para><code>getService($name)</code>: Ontiene el servicio
  495. por su nombre.</para></listitem>
  496. <listitem><para><code>getServices()</code>: Obtener todos los
  497. servicios agregados.</para></listitem>
  498. <listitem><para><code>removeService($name)</code>: Elimina un
  499. servicio del mapa.</para></listitem>
  500. <listitem><para><code>toArray()</code>: Mandar el mapa de servicio
  501. a un array.</para></listitem>
  502. <listitem><para><code>toDojoArray()</code>: Mandar el mapa de servicio
  503. a un array compatible con Dojo Toolkit.</para></listitem>
  504. <listitem><para><code>toJson()</code>: Mandar el mapa de servicio
  505. a una representación JSON.</para></listitem>
  506. </itemizedlist>
  507. <para>
  508. <classname>Zend_Json_Server_Smd_Service</classname> tiene los
  509. siguientes métodos:
  510. </para>
  511. <itemizedlist>
  512. <listitem><para><code>setOptions(array $options)</code>:
  513. Establecer el estado del objeto dede un array. Cualquier
  514. mutator (métodos comenzando con 'set') puede ser utilizado
  515. como una clave y establecerlo mediante este método.
  516. </para></listitem>
  517. <listitem><para><code>setName($name)</code>: Establecer el nombre
  518. del servicio (típicamente, la función o el nombre del
  519. método).</para></listitem>
  520. <listitem><para><code>getName()</code>: Recuperar el nombre del
  521. servicio.</para></listitem>
  522. <listitem><para><code>setTransport($transport)</code>: Establecer
  523. el servicio de transporte (actualmente, sólo transportes
  524. apoyados por <classname>Zend_Json_Server_Smd</classname>
  525. son permitidos).</para></listitem>
  526. <listitem><para><code>getTransport()</code>: Recuperar el transporte
  527. actual.</para></listitem>
  528. <listitem><para><code>setTarget($target)</code>: Establecer el
  529. punto final de la URL del servicio (típicamente, este
  530. será el mismo que el SMD en general, al cual el servicio
  531. está agregado).</para></listitem>
  532. <listitem><para><code>getTarget()</code>: Obtener el punto final
  533. de la URL del servicio.</para></listitem>
  534. <listitem><para><code>setEnvelope($envelopeType)</code>:
  535. Establecer la envoltura del servicio (actualmente, sólo
  536. se permiten las envolturas soportadas por
  537. <classname>Zend_Json_Server_Smd</classname>.</para></listitem>
  538. <listitem><para><code>getEnvelope()</code>: Recuperar el tipo de
  539. envoltura del servicio.</para></listitem>
  540. <listitem><para><code>addParam($type, array $options = array(),
  541. $order = null)</code>: Añadir un parámetro para el
  542. servicio. Por defecto, sólo el tipo de parámetro es necesario.
  543. Sin embargo, también puede especificar el orden, así como
  544. opciones tales como:</para>
  545. <itemizedlist>
  546. <listitem><para><emphasis>name</emphasis>: el nombre del
  547. parámetro</para></listitem>
  548. <listitem><para><emphasis>optional</emphasis>: cuándo
  549. el parámetro es opcional o no</para></listitem>
  550. <listitem><para><emphasis>default</emphasis>: un valor
  551. por defecto para el parámetro</para></listitem>
  552. <listitem><para><emphasis>description</emphasis>: texto
  553. describiendo el parámetro</para></listitem>
  554. </itemizedlist>
  555. </listitem>
  556. <listitem><para><code>addParams(array $params)</code>: Agregar
  557. varios parámetros a la vez; cada param debería ser un array
  558. asociativo conteniendo mínimamente la clave 'type' describiendo
  559. el tipo de parámetro y, opcionalmente la clave 'order';
  560. cualquiera de las otras claves serán pasados como
  561. <code>$options</code> a <code>addOption()</code>.</para></listitem>
  562. <listitem><para><code>setParams(array $params)</code>:
  563. Establecer muchos parámetros a la vez, sobrescribiendo
  564. cualquiera de los parámetros existentes.</para></listitem>
  565. <listitem><para><code>getParams()</code>: Recuperar todos los
  566. parámetros actualmente establecidos.</para></listitem>
  567. <listitem><para><code>setReturn($type)</code>: Establecer el tipo
  568. del valor de retorno del servicio.</para></listitem>
  569. <listitem><para><code>getReturn()</code>: Obtener el tipo del
  570. valor de retorno del servicio.</para></listitem>
  571. <listitem><para><code>toArray()</code>: Mandar el servicio a un
  572. array.</para></listitem>
  573. <listitem><para><code>toJson()</code>: Mandar el servicio a una
  574. representación JSON.</para></listitem>
  575. </itemizedlist>
  576. </sect3>
  577. </sect2>
  578. </sect1>
  579. <!--
  580. vim:se ts=4 sw=4 et:
  581. -->