Zend_Json-Server.xml 38 KB

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