{"id":249,"date":"2009-01-20T21:14:14","date_gmt":"2009-01-21T02:14:14","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/taws\/?p=249"},"modified":"2015-11-21T15:13:43","modified_gmt":"2015-11-21T20:13:43","slug":"json-rpc-java-una-alternativa-de-comunicacion-entre-cliente-y-servidor","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/taws\/2009\/01\/20\/json-rpc-java-una-alternativa-de-comunicacion-entre-cliente-y-servidor\/","title":{"rendered":"JSON-RPC-Java una alternativa de comunicaci\u00f3n entre Cliente y Servidor"},"content":{"rendered":"<p><strong>Por Andr\u00e9s Vargas<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Dado que las aplicaciones Web mejoran su interacci\u00f3n con el usuario cuando se evita recargar la p\u00e1gina para actualizar una parte de la misma, es importante considerar todas las alternativas que se tienen para conseguir este objetivo.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Adem\u00e1s del famoso modelo propuesto por JJ Garret ( S\u00ed! AJAX ), existen otros mecanismos que pueden ayudarnos con los requerimientos al servidor: las llamadas remotas a procedimientos (RPC por sus siglas en ingl\u00e9s).Existen dos protocolos importantes en el mundo de los RPC: XML-RPC y JSON-RPC.<\/span><\/p>\n<p>Antes de continuar, es importante definir qu\u00e9 es JSON y cu\u00e1les son sus ventajas:<\/p>\n<ul>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--><!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --><!-- [if gte mso 10]&gt; &lt;! \/* Style Definitions *\/ table.MsoNormalTable {mso-style-name:\"Tabla normal\"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:\"\"; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:\"Times New Roman\"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} --> <!--[endif]-->JSON es un formato de texto para intercambio de datos, tal como XML, s\u00f3lo que mucho m\u00e1s liviano.<\/li>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--><!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --><!-- [if gte mso 10]&gt; &lt;! \/* Style Definitions *\/ table.MsoNormalTable {mso-style-name:\"Tabla normal\"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:\"\"; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:\"Times New Roman\"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} --> <!--[endif]-->Se utiliza para representar estructuras de datos simples llamados objetos y arreglos asociativos.<\/li>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--><!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:\"Times New Roman\"; mso-bidi-theme-font:minor-bidi; mso-ansi-language:ES; mso-fareast-language:EN-US;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --><!-- [if gte mso 10]&gt; &lt;! \/* Style Definitions *\/ table.MsoNormalTable {mso-style-name:\"Tabla normal\"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:\"\"; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Calibri\",\"sans-serif\"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:\"Times New Roman\"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} --> <!--[endif]-->Existe c\u00f3digo para parsear y generar datos JSON para una larga variedad de lenguajes de programaci\u00f3n.<\/li>\n<\/ul>\n<p><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]-->JSON est\u00e1 construido en dos estructuras:<\/p>\n<ul>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> Una colecci\u00f3n de pares nombre\/valor: Objeto<\/li>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> Una lista de Valores ordenada: Colecciones ( arreglos ).<\/li>\n<\/ul>\n<p style=\"text-align: left\"><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> <strong>En el ejemplo siguiente, observamos texto representado usando JSON. En el texto mostrado, la clave phoneNumbers representa un arreglo, la clave address representa un objeto y las claves firstName y lastName que representan pares nombre:valor son parte del objeto que empieza en las llaves m\u00e1s externas.<\/strong><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">{<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"firstName\": \"John\",<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"lastName\": \"Smith\",<!--more--><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"address\": {<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"streetAddress\": \"21 2nd Street\",<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"city\": \"New York\",<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"state\": \"NY\",<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"postalCode\": 10021<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">},<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"phoneNumbers\": [<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"212 555-1234\",<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">\"646 555-4567\"<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: 0.0001pt\">]<\/p>\n<p>}<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> <strong><span lang=\"ES\" style=\"font-size: 16pt\">Caracter\u00edsticas de JSON-RPC-Java<\/span><\/strong><\/p>\n<p>JSON-RPC-Java es un framework que implementa el protocolo JSON-RPC. Permite mapear objetos de Java a objetos de JavaScript y viceversa.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-250 aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj1-300x223.jpg\" alt=\"\" width=\"300\" height=\"223\" \/><\/a><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><strong><span lang=\"ES\" style=\"font-size: 16pt\">Manejando el Servidor y el Cliente<\/span><\/strong><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Del lado del Servidor lo primero que se debe hacer es desarrollar las clases que ser\u00e1n accesibles desde el cliente, es recomendable que est\u00e9n dise\u00f1adas de tal manera que no permitan ejecutar funciones de negocio que puedan comprometer la seguridad del sistema. Estas clases permitir\u00e1n ejecutar acciones y obtener datos necesarios con el m\u00ednimo n\u00famero de mensajes HTTP, mejorando as\u00ed la eficiencia. Para hacer p\u00fablicos los m\u00e9todos debemos registrar una instancia de nuestra clase en un objeto JSONRPCBridge que previamente habremos creado y guardado en la sesi\u00f3n HTTP todo esto implementado en un Servlet.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\">Del lado del Cliente se debe crear una instancia de la clase JSON-RPC, y con esto llamar a nuestra funci\u00f3n Java desde JavaScript.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: center\"><a href=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-251 aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj2-300x115.jpg\" alt=\"\" width=\"300\" height=\"115\" \/><\/a><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><strong><span lang=\"ES\" style=\"font-size: 16pt\">C\u00f3mo usarlo<\/span><\/strong><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Para implementar aplicaciones que usen JSON-RPC-Java necesitaremos descargarla distribuci\u00f3n de la misma en La utilizaci\u00f3n de esta tecnolog\u00eda se basa principalmente en descargar la siguiente distribuci\u00f3n <a href=\"aqui\">aqui<\/a>. <\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Al descomprimir la mencionada distribuci\u00f3n, los archivos que nos interesan a\u00f1adir al proyecto son: <em><strong>jsonrpc-1.0.jar<\/strong><\/em><em> (directorio ra\u00edz) y<\/em> <em><strong>jsonrpc.js <\/strong><\/em><em>(\/webapps\/jsonrp). Lo siguiente es indicar en el deployment descriptor (web.xml)la referencia al Servlet que se encuentra en la librer\u00eda, Este Servlet <\/em>ser\u00e1 el encargado de comunicar al c\u00f3digo JavaScript la estructura de nuestras clases compartidas.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\">El siguiente paso es informar al Servlet de cu\u00e1les son nuestras clases. S\u00f3lo es necesario registrar las clases una vez en cada sesi\u00f3n. Para ello utilizamos la clase JSONRPCBridge. Mantendremos una instancia de JSONRPCBridge por cada sesi\u00f3n.<\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><a href=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-253\" src=\"http:\/\/blog.espol.edu.ec\/taws\/files\/2009\/01\/jrj3-300x129.jpg\" alt=\"\" width=\"300\" height=\"129\" \/><\/a><\/p>\n<p class=\"MsoNormal\"><strong><span lang=\"ES\" style=\"font-size: 16pt\">Tipos de Retornos<\/span><\/strong><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Una vez que todo est\u00e9 funcionando podremos con facilidad invocar m\u00e9todos de clases de Java que nos devuelvan Tipos de datos Simples, Objetos, adem\u00e1s puede serializar colecciones de objetos de clases que implementen las interfaces Map, Set o List.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">Existen dos formas de acceder a los m\u00e9todos de Java, As\u00edncrona y S\u00edncrona, si se lo realiza de una forma s\u00edncrona tendremos que esperar la respuesta del Servidor para que el cliente JavaScript desbloquee el navegador, en cambio si es as\u00edncrona podremos seguir con la ejecuci\u00f3n de la aplicaci\u00f3n.<\/span><\/p>\n<p class=\"MsoNormal\"><strong><span lang=\"ES\" style=\"font-size: 16pt\">Conclusi\u00f3n<\/span><\/strong><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">\u00bfQuien alguna vez no ha sentido la necesidad de usar directamente un m\u00e9todo de Java desde el Cliente? Pues bien esta tecnolog\u00eda nos permite implementarlo, si bien es cierto un requerimiento AJAX normal nos proporciona una buena soluci\u00f3n, puede llegar a ser un poco m\u00e1s complicado de implementar.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><span lang=\"ES\">JSON-RPC-Java, nos ayuda a disminuir el n\u00famero de l\u00edneas de c\u00f3digo significativamente tanto del lado del Cliente como del Servidor, convirti\u00e9ndose en una herramienta \u00fatil para aumentar el rendimiento de nuestras aplicaciones. En una pr\u00f3xima entrega,incluir\u00e9 c\u00f3digos de ejemplo explicados paso a paso para visualizar a\u00fan mejor la implementaci\u00f3n de aplicaciones que incluyen esta alternativa que sin duda alguna es muy \u00fatil!<\/span><\/p>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><strong>Fuentes<\/strong><\/p>\n<ul>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> <a href=\"http:\/\/json.org\/\">http:\/\/json.org\/<\/a><\/li>\n<li><!-- [if gte mso 9]&gt; Normal 0 21 false false false ES-EC X-NONE X-NONE &lt;![endif]--><!-- [if gte mso 9]&gt; &lt;![endif]--> http:\/\/www.ateneatech.com\/blog\/json-rpc-java-comunicaciones-ajax-transparentes-tutorial-completo-y-ejemplos<\/li>\n<li>http:\/\/edgenhuang.blog.51cto.com\/47333\/23778<\/li>\n<li>http:\/\/oss.metaparadigm.com\/jsonrpc\/<\/li>\n<\/ul>\n<p class=\"MsoNormal\" style=\"text-align: justify\"><img decoding=\"async\" src=\"\/Users\/ADMINI~1\/AppData\/Local\/Temp\/moz-screenshot.jpg\" alt=\"\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por Andr\u00e9s Vargas &nbsp; Dado que las aplicaciones Web mejoran su interacci\u00f3n con el usuario cuando se evita recargar la p\u00e1gina para actualizar una parte de la misma, es importante considerar todas las alternativas que se tienen para conseguir este objetivo. Adem\u00e1s del famoso modelo propuesto por JJ Garret ( S\u00ed! AJAX ), existen otros [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":250,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[3338,3337,3336,23],"class_list":["post-249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web","tag-ajax","tag-json","tag-json-rpc-java","tag-web-20"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/posts\/249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/comments?post=249"}],"version-history":[{"count":7,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/posts\/249\/revisions"}],"predecessor-version":[{"id":634,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/posts\/249\/revisions\/634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/media\/250"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/media?parent=249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/categories?post=249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/taws\/wp-json\/wp\/v2\/tags?post=249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}