Zend_Json-Server.xml 38 KB

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