{"id":49288,"date":"2025-03-26T16:30:40","date_gmt":"2025-03-26T19:30:40","guid":{"rendered":"\/tutoriais\/?p=49288"},"modified":"2025-03-26T16:30:42","modified_gmt":"2025-03-26T19:30:42","slug":"graphql-vs-rest","status":"publish","type":"post","link":"\/br\/tutoriais\/graphql-vs-rest","title":{"rendered":"GraphQL vs REST: qual o melhor para o desenvolvimento de API?"},"content":{"rendered":"<p>API &eacute; uma sigla em ingl&ecirc;s para <em>Application Programming Interface<\/em>, que significa Interface de Programa&ccedil;&atilde;o de Aplica&ccedil;&otilde;es. Ela &eacute; um software intermedi&aacute;rio que permite que uma aplica&ccedil;&atilde;o se comunique com outras sem precisar saber como eles foram implementados, tanto pode ser um servidor, um cliente ou um aplicativo que se comunica com um servidor. Abaixo trouxemos uma linha do tempo que exemplifica como essa interface tem evolu&iacute;do ao longo dos anos, e estabelece uma excelente base de como a API pode ser constru&iacute;da. O REST continua sendo a ferramenta mais popular para o desenvolvimento de APIs. Por&eacute;m, em 2012, o Facebook procurava algo diferente do REST e foi a&iacute; que o GraphQL (sigla em ingl&ecirc;s para <em>Graph Query Language<\/em>) surgiu.&nbsp;<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/linha-do-tempo-api-1024x328.png\" alt=\"\" class=\"wp-image-391\" style=\"width:740px;height:237px\"><figcaption class=\"wp-element-caption\">Fonte: https:\/\/blog.api.rakuten.net\/graphql-vs-rest\/<\/figcaption><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-o-que-e-rest\"><strong>O que &eacute; REST?<\/strong><\/h2><p>REST &eacute; uma API de Transfer&ecirc;ncia de Estado Representacional (<em>Representational Sate Tranfer<\/em>), o que significa que cada recurso tem seu pr&oacute;prio endpoint (ponto de extremidade). Inicialmente, o termo REST foi introduzido e definido em 2000, na tese de doutorado de Roy Fielding e foi popularizado por empresas como o Twitter em 2006. REST &eacute; um conceito de arquitetura de software baseado em rede. Ele n&atilde;o tem nenhum conjunto de ferramentas oficial, nenhuma especifica&ccedil;&atilde;o, n&atilde;o importa se voc&ecirc; usa protocolo HTTP, AMQP, etc. O REST foi projetado para desacoplar uma API do cliente.&nbsp;<\/p><h2 class=\"wp-block-heading\" id=\"h-os-principais-desafios-do-rest-api\"><strong>Os Principais Desafios do REST API<\/strong><\/h2><p><strong>O REST API, &agrave;s vezes, requer uma Maior Lat&ecirc;ncia.<\/strong> Isso acontece quando precisamos mostrar alguns dados que devem ser consumidos de diferentes endpoints e o consumo de dados de apenas um &uacute;nico endpoint n&atilde;o &eacute; suficiente. A tabela a seguir ilustra tr&ecirc;s endpoints:<\/p><figure tabindex=\"0\" class=\"wp-block-table is-style-regular\"><table><tbody><tr><td>GET \/user<\/td><td>Busca uma lista de todos os usu&aacute;rios<\/td><\/tr><tr><td>GET \/user\/:id<\/td><td>Busca um &uacute;nico usu&aacute;rio :id<\/td><\/tr><tr><td>GET \/user\/:id\/projects<\/td><td>Busca todos os projetos de um usu&aacute;rio<\/td><\/tr><\/tbody><\/table><\/figure><p>E se precis&aacute;ssemos buscar projetos em um aplicativo cliente relacionados a um usu&aacute;rio espec&iacute;fico e algumas tarefas tamb&eacute;m relacionados a este projeto? A equipe back-end precisa desenvolver algo mais? Existem algumas maneiras de fazer isso, elas s&atilde;o as seguintes:<\/p><ol class=\"wp-block-list\">\n<li>Para incluir uma consulta e depois fazer as tarefas retornar a cada projeto: GET \/users:id\/projects?include=tasks<\/li>\n\n\n\n<li>Para separar o endpoint, os recursos do projeto e pedir a um aplicativo cliente a filtragem de consulta com base no id do usu&aacute;rio: GET \/projects?userid=:id&amp;include=tasks<\/li>\n\n\n\n<li>Para incluir todos os dados poss&iacute;veis associados ao usu&aacute;rio em um &uacute;nico endpoint: GET \/tasks?userid=:id<\/li>\n<\/ol><p><strong><em>Over-fetching<\/em><\/strong><strong> (excesso de dados) e <em>Under-fetching<\/em> (dados insuficientes).<\/strong> Quando h&aacute; necessidade de retornar muitos dados, o aplicativo cliente n&atilde;o precisa de todos esses dados. Seus clientes podem n&atilde;o ficar satisfeitos se forem obrigados a baixar informa&ccedil;&otilde;es adicionais desnecess&aacute;rias. Por outro lado, ao reduzir o n&iacute;vel de informa&ccedil;&otilde;es em um servidor, outro problema pode ser enfrentado: o de consulta insuficiente (under-fetching), o que resulta na necessidade de mais um endpoint e mais recursos em um servidor para conseguir acessar os dados solicitados. A solu&ccedil;&atilde;o para &eacute;: GET \/users?fields=firstname,lastname.&nbsp;<\/p><p><strong>Dificuldade em criar vers&otilde;es e substituir campos que n&atilde;o s&atilde;o necess&aacute;rios para os pr&oacute;ximos lan&ccedil;amentos<\/strong>. &Eacute; dif&iacute;cil manter o REST APIs ao longo do tempo, s&atilde;o feitas diferentes solicita&ccedil;&otilde;es para suportar diversas vers&otilde;es de aplicativos e v&aacute;rios clientes. &Eacute; por isso que, normalmente, a v1 permanece como ela &eacute;, e a v2 &eacute; criada a partir de uma estrutura de dados mais recente. J&aacute; com GraphQL, isso pode ser feito sem controle de vers&otilde;es. O GraphQL retorna apenas dados explicitamente solicitados, assim, novos recursos podem ser adicionados por meio de novos tipos e novos campos sobre esses tipos sem criar um <em>breaking change<\/em> (uma a&ccedil;&atilde;o que quebra a compatibilidade da API). O que levou &agrave; uma pr&aacute;tica comum de evitar <em>breaking changes<\/em> cont&iacute;nuas e entregar uma API sem vers&otilde;es.<\/p><p><strong>Dados imprevis&iacute;veis<\/strong>. Com o REST n&atilde;o d&aacute; para saber quais dados ser&atilde;o retornados do servidor, quais campos, quantos deles etc. J&aacute; com o GraphQL, o cliente determina quais campos ele deseja consultar. N&atilde;o importa se &eacute; uma <em>query<\/em> (consulta) ou uma <em>mutation<\/em> (mudan&ccedil;as no conte&uacute;do) &mdash; voc&ecirc; &eacute; quem controla o que ser&aacute; retornado.<\/p><h2 class=\"wp-block-heading\" id=\"h-o-que-e-graphql\"><strong>O que &eacute; GraphQL?<\/strong><\/h2><p>O GraphQL &eacute; um conceito mais recente que o REST, ele foi lan&ccedil;ado oficialmente pelo Facebook em 2012 e se tornou <em>open source<\/em> (c&oacute;digo aberto) em 2015. O GraphQL, por ser uma nova forma de solicitar dados para um servidor, &eacute; uma linguagem de consulta (<em>query language),<\/em> especifica&ccedil;&atilde;o e cole&ccedil;&atilde;o de ferramentas desenvolvida para operar sobre um &uacute;nico endpoint atrav&eacute;s do HTTP, que otimiza o desempenho e a flexibilidade.&nbsp;<\/p><p>A tabela a seguir compra o GraphQL e o REST como duas abordagens de desenvolvimento de API. Em termos gerais, n&atilde;o podemos considerar essa compara&ccedil;&atilde;o como uma forma de apontar qual &eacute; o melhor entre os dois, mas sim, para entender a melhor op&ccedil;&atilde;o de acordo com a natureza do seu projeto, j&aacute; que o REST &eacute; o padr&atilde;o convencional para o desenvolvimento de APIs e o GraphQL &eacute; uma linguagem de consulta que ajuda a resolver problemas com as APIs.&nbsp; ?&nbsp;<\/p><p>A principal diferen&ccedil;a aqui &eacute; que o GraphQL &eacute; uma linguagem voltada ao cliente. Sua arquitetura permite que o aplicativo front-end determina quais dados devem ser pesquisados e a quantidade de dados que deve ser retornada ao servidor. J&aacute; no REST, tudo &eacute; projetado no servidor, logo, o servidor &eacute; o respons&aacute;vel pela arquitetura.&nbsp;<\/p><figure tabindex=\"0\" class=\"wp-block-table\"><table><tbody><tr><td><strong>GraphQL<\/strong><\/td><td><strong>REST<\/strong><\/td><\/tr><tr><td>Uma linguagem de consulta que oferece efici&ecirc;ncia e flexibilidade na resolu&ccedil;&atilde;o de problemas comuns durante a integra&ccedil;&atilde;o de APIs.<\/td><td>Um modelo arquitet&ocirc;nico de software amplamente conhecido como um padr&atilde;o convencional para o desenvolvimento de APIs.<\/td><\/tr><tr><td>Implementado por HTTP usando um &uacute;nico endpoint que fornece todos os recursos do servi&ccedil;o exposto<\/td><td>Implementado por um conjunto de URLs em que cada uma delas exibe um &uacute;nico recurso<\/td><\/tr><tr><td>Arquitetura voltada ao cliente<\/td><td>Arquitetura voltada ao servidor<\/td><\/tr><tr><td>N&atilde;o tem armazenamento de cache autom&aacute;tico<\/td><td>Tem armazenamento de cache autom&aacute;tico<\/td><\/tr><tr><td>Sem controle de vers&atilde;o para API<\/td><td>Suporta v&aacute;rias vers&otilde;es de API<\/td><\/tr><tr><td>Apenas representa&ccedil;&atilde;o JSON<\/td><td>Suporta diversos formatos de dados<\/td><\/tr><tr><td>Apenas uma ferramenta &eacute; utilizada para a documenta&ccedil;&atilde;o: GraphiQL<\/td><td>Ampla gama de op&ccedil;&otilde;es para documenta&ccedil;&atilde;o automatizada, como OpenAPI e API Blueprint<\/td><\/tr><tr><td>&Eacute; mais dif&iacute;cil identificar erros pelos c&oacute;digos de status HTTP<\/td><td>Utiliza diferentes c&oacute;digos de status HTTP para facilitar a identifica&ccedil;&atilde;o de erros<\/td><\/tr><\/tbody><\/table><\/figure><h2 class=\"wp-block-heading\" id=\"h-motivos-para-usar-o-graphql\"><strong>Motivos para Usar o GraphQL<\/strong><\/h2><p>H&aacute; tr&ecirc;s motivos principais que nos levam a querer usar o GraphQL em vez do REST.&nbsp;<\/p><ul class=\"wp-block-list\">\n<li><strong>Desempenho de Rede.<\/strong> Ideal para quando queremos aumentar o desempenho de rede ao enviar menos dados ou somente informa&ccedil;&otilde;es necess&aacute;rias e relevantes aos clientes.&nbsp;<\/li>\n\n\n\n<li><strong>A Escolha de Projeto &ldquo;Incluir Requisi&ccedil;&atilde;o x Endpoint Adicional<\/strong>&ldquo;. A escolha mais dif&iacute;cil no desenvolvimento de projetos de API &eacute; <em>incluir a requisi&ccedil;&atilde;o<\/em> (including request) ou <em>criar um endpoint adicional<\/em> (creating an additional endpoint. Mas com o GraphQL, esse problema foi resolvido porque ele conta com as fun&ccedil;&otilde;es <em>schema<\/em> e <em>resolvers<\/em>. Dessa forma, o cliente tem controle dos dados que devem ser retornados.<\/li>\n\n\n\n<li><strong>Gerenciar diferentes tipos de clientes.<\/strong> Imagine que voc&ecirc; tenha uma API e todos os seus clientes (aplicativos iOS, aplicativos Android, aplica&ccedil;&otilde;es web etc.) s&atilde;o completamente diferentes: eles precisam de uma estrutura totalmente diferente ou uma quantidade diferente de dados retornados do servidor. Com a abordagem REST, voc&ecirc; pode criar uma API separada. Em contrapartida, com o GraphQL, voc&ecirc; n&atilde;o precisa de uma API separada porque voc&ecirc; pode ter tudo retornado de um &uacute;nico endpoint.&nbsp;<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-como-comecar\"><strong>Como Come&ccedil;ar<\/strong><\/h2><p>Esta &eacute; a forma como uma consulta (query) &eacute; estruturada. Tr&ecirc;s partes principais s&atilde;o consideradas aqui: 1) tipo de opera&ccedil;&atilde;o (operation type), 2) endpoint da opera&ccedil;&atilde;o (operation endpoint), 3) campos solicitados (requested fields).<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/estrutura-de-uma-query.png\" alt=\"\" class=\"wp-image-392\" style=\"width:576px;height:284px\"><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-termos-que-valem-a-pena-aprender\"><strong>Termos que valem &agrave; pena aprender<\/strong><\/h2><p>Seja qual for a implementa&ccedil;&atilde;o escolhida, pois h&aacute; uma variedade de linguagens, ela n&atilde;o existe somente em JavaScript ou Node &mdash; voc&ecirc; pode usar PHP, Python, JAVA, Go, e muitas outras. Cada linguagem de programa&ccedil;&atilde;o tem sua pr&oacute;pria implementa&ccedil;&atilde;o de GraphQL, ent&atilde;o voc&ecirc; nem precisa desenvolver tudo do zero. Existem ferramentas e pacotes que podem ser utilizados, e esses termos s&atilde;o quase os mesmo para todos eles. Por isso, aprender o que significa esses termos pode valer a pena se voc&ecirc; quer desenvolver uma API com o GraphQL:<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignright size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-types.png\" alt=\"\" class=\"wp-image-393\" style=\"width:217px;height:156px\"><\/figure><\/div><p><strong><em>Types<\/em><\/strong><strong> (tipos).<\/strong>&nbsp; O modelo de dados no GraphQL &eacute; representado em tipos, que s&atilde;o fortemente tipados (typed). Deve haver um mapeamento one-to-one entre eus modelos e os codigos do GraphQL. Pense nisso como uma tabela de banco de dados em que a tabela do usu&aacute;rio tenha campos como id, primeiro nome, sobrenome, e-mail, projetos. Coisas que valem a pena lembrar: o ponto de exclama&ccedil;&atilde;o que indica que um identificador (id) n&atilde;o pode ser anul&aacute;vel ou, em outras palavras, &eacute; preciso ter algo no identificador por ser um campo obrigat&oacute;rio.&nbsp;<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignleft size-medium is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-queries-300x83.png\" alt=\"\" class=\"wp-image-394\" style=\"width:275px;height:76px\"><\/figure><\/div><p><strong><em>Queries<\/em><\/strong><strong> (consultas).<\/strong> As queries definem quais consultas voc&ecirc; pode executar seu GraphQL API. Por conven&ccedil;&atilde;o, deve haver um RootQuery, que cont&eacute;m todas as consultas existentes. No exemplo, o coment&aacute;rio mostra como fica o restante da API. Nos par&ecirc;nteses entre os colchetes, vemos um argumento que precisa ser o &uacute;nico identificador, o que vem ap&oacute;s s dois pontos &eacute; o tipo de usu&aacute;rio. Ele mostra o que deve ser retornado quando fazemos essa consulta, e depois retorna ao usu&aacute;rio. Logo, se consultamos um projeto, o projeto ser&aacute; retornado, se consultarmos uma tarefa (task), a tarefa ser&aacute; retornada, e assim por diante.&nbsp;<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignright size-medium is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-mutations-300x40.png\" alt=\"\" class=\"wp-image-395\" style=\"width:474px;height:64px\"><\/figure><\/div><p><strong><em>Mutations<\/em><\/strong><strong> (mudan&ccedil;as de conte&uacute;do).<\/strong> Se as consultas (queries) s&atilde;o solicita&ccedil;&otilde;es (requests) GET, as mudan&ccedil;as de conte&uacute;do podem ser vistas como solicita&ccedil;&otilde;es POST | PATCH | PUT | DELETE que modificam os dados. O exemplo traz mudan&ccedil;as de conte&uacute;do de &ldquo;createUser&rdquo; (criar usu&aacute;rio), &ldquo;updateUser&rdquo; (atualizar usu&aacute;rio), &ldquo;removeUser&rdquo; (remover usu&aacute;rio).<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignleft size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-input.png\" alt=\"\" class=\"wp-image-396\" style=\"width:130px;height:93px\"><\/figure><\/div><p><strong>Input (entrada).<\/strong> o tipo UserInput &eacute; um tipo de Usu&aacute;rio (User type) sem id e campos de projetos. Note que a palavra-chave &eacute; <em>input<\/em> e n&atilde;o <em>type<\/em>. Imagine que ele seja um formul&aacute;rio em uma p&aacute;gina em que voc&ecirc; precisa preencher alguns dados e quais os tipos de informa&ccedil;&otilde;es necess&aacute;rios para criar um perfil de usu&aacute;rio.<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignright size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-resolvers.png\" alt=\"\" class=\"wp-image-397\" style=\"width:185px;height:122px\"><\/figure><\/div><p><strong><em>Resolvers<\/em>.<\/strong> Como o pr&oacute;prio nome sugere, a fun&ccedil;&atilde;o resolver d&aacute; um conjunto espec&iacute;fico de instru&ccedil;&otilde;es para converter as opera&ccedil;&otilde;es do GraphQL em dados. Ele &eacute; basicamente uma fun&ccedil;&atilde;o de controle, a l&oacute;gica do que tem que ser retornado (resolvers for queries) quando essa consulta &eacute; feita e o usu&aacute;rio solicita os dados, j&aacute; os resolvers para mudan&ccedil;as de conte&uacute;do (resolvers for mutations) s&atilde;o utilizadas quando o usu&aacute;rio busca atualizar ou deletar os dados.<\/p><div class=\"wp-block-image is-style-default\">\n<figure class=\"alignleft size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/www.hostinger.com\/br\/blog\/wp-content\/uploads\/sites\/20\/2021\/11\/exemplo-de-schema.png\" alt=\"\" class=\"wp-image-398\" style=\"width:161px;height:75px\"><\/figure><\/div><p><strong>Schema (esquema).<\/strong> Definimos o schema do GraphQL por meio de tipos, consultas e mudan&ccedil;as de conte&uacute;do, que &eacute; o que o endpoint do GraphQL mostra ao mundo.<\/p><p><\/p><h2 class=\"wp-block-heading\" id=\"h-materiais-que-valem-a-pena-conferir\"><strong>Materiais que valem a pena conferir<\/strong><\/h2><p>Aqui v&atilde;o dois materiais fundamentais para se aprofundar mais no campo do GraphQL (ambos em ingl&ecirc;s):<\/p><ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/graphql.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>GraphQL.org<\/strong><\/a>. Dedicado a ensinar todos os conceitos b&aacute;sicos e as reais especifica&ccedil;&otilde;es do GraphQL.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.howtographql.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Como desenvolver no GraphQL?<\/strong><\/a> Dedicado ensinar implementa&ccedil;&otilde;es. Por exemplo, se voc&ecirc; quer saber sobre o servidor Apollo, ele te d&aacute; uma boa base de quais frameworks front-end podem ser usados para consumir os dados daquela API. N&atilde;o precisa usar nenhuma ferramenta ou biblioteca para os frameworks front-end para consumir a API &mdash; voc&ecirc; pode fazer uma solicita&ccedil;&atilde;o XmlHttp normal, mas voc&ecirc; precisa fazer uma solicita&ccedil;&atilde;o POST para esse endpoint e fornecer a consulta no corpo (body), que &eacute; o GraphQL.&nbsp;<\/li>\n<\/ul><p>O servidor de API GraphQL pode ser usado como um gateway para outros microsservi&ccedil;os ao falar diretamente com o banco de dados ou outras APIs REST. Assim, voc&ecirc; pode ter v&aacute;rias APIs REST, obter dados e fazer uma fonte &uacute;nica de verdade (SSOT, sigla em ingl&ecirc;s).&nbsp;<\/p><p><strong><em>Este artigo foi inspirado na apresenta&ccedil;&atilde;o do desenvolvedor front-end, Gediminas Survila: &ldquo;GraphQL vs. REST: Which is the best for API Development?&rdquo; [GraphQL vs. REST: Qual o melhor para o desenvolvimento de API?]<\/em><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>API &eacute; uma sigla em ingl&ecirc;s para Application Programming Interface, que significa Interface de Programa&ccedil;&atilde;o de Aplica&ccedil;&otilde;es. Ela &eacute; um software intermedi&aacute;rio que permite que uma aplica&ccedil;&atilde;o se comunique com outras sem precisar saber como eles foram implementados, tanto pode ser um servidor, um cliente ou um aplicativo que se comunica com um servidor. Abaixo [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/br\/tutoriais\/graphql-vs-rest\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":356,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","footnotes":""},"categories":[7066],"tags":[7706],"class_list":["post-49288","post","type-post","status-publish","format-standard","hentry","category-outros","tag-blog-da-hostinger"],"hreflangs":[{"locale":"pt-BR","link":"https:\/\/www.hostinger.com\/br\/tutoriais\/graphql-vs-rest","default":1},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/graphql-vs-rest","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/49288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/users\/356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/comments?post=49288"}],"version-history":[{"count":1,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/49288\/revisions"}],"predecessor-version":[{"id":49289,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/49288\/revisions\/49289"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/media?parent=49288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/categories?post=49288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/tags?post=49288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}