{"id":5125,"date":"2026-05-17T13:45:34","date_gmt":"2026-05-17T16:45:34","guid":{"rendered":"https:\/\/www.sorting.com.br\/blog\/?p=5125"},"modified":"2026-05-17T13:45:34","modified_gmt":"2026-05-17T16:45:34","slug":"arquitetura-local-first-web-development","status":"publish","type":"post","link":"https:\/\/www.sorting.com.br\/blog\/arquitetura-local-first-web-development","title":{"rendered":"Arquitetura local-first: quando usar, como funciona e onde d\u00e1 errado"},"content":{"rendered":"\n<h3 class=\"wp-block-heading saiw-linha-fina\">Entenda a arquitetura local-first, os principais componentes, as op\u00e7\u00f5es de armazenamento e os limites reais para apps web modernos.<\/h3>\n\n\n<p>Se voc\u00ea j\u00e1 abriu um app e viu uma tela em branco, um spinner eterno ou uma intera\u00e7\u00e3o lenta porque tudo depende de uma ida ao servidor, j\u00e1 sentiu na pr\u00e1tica o problema que a arquitetura local-first tenta resolver. A ideia n\u00e3o \u00e9 apenas \u201cfuncionar sem internet\u201d. \u00c9 mudar o ponto de partida: o dado vive primeiro no dispositivo do usu\u00e1rio, e a sincroniza\u00e7\u00e3o acontece depois, em segundo plano.<\/p><p>Esse modelo ganhou for\u00e7a porque responde a uma frustra\u00e7\u00e3o real de produtos modernos: interfaces cada vez mais ricas, colabora\u00e7\u00e3o em tempo real, necessidade de privacidade e expectativas altas de velocidade. Em vez de tratar o cliente como uma janela passiva para um banco central, a arquitetura local-first transforma o navegador em um n\u00f3 de uma rede distribu\u00edda, com banco pr\u00f3prio e regras claras de sincroniza\u00e7\u00e3o.<\/p><p>Isso n\u00e3o significa que seja a solu\u00e7\u00e3o ideal para tudo. Na pr\u00e1tica, local-first \u00e9 excelente para certos tipos de produto e uma m\u00e1 escolha para outros. O valor est\u00e1 menos na moda e mais em entender quando o desenho arquitetural reduz lat\u00eancia, melhora a experi\u00eancia e d\u00e1 mais autonomia ao usu\u00e1rio.<\/p><h2>O que \u00e9 arquitetura local-first<\/h2><p>Arquitetura local-first \u00e9 um modelo em que o aplicativo l\u00ea e grava dados localmente antes de sincronizar com servidores ou outros dispositivos. Em vez de esperar a resposta de uma API para atualizar a interface, o app usa um armazenamento local como fonte imediata de verdade para aquela sess\u00e3o.<\/p><p>Na pr\u00e1tica, isso muda quase tudo. O clique deixa de ser seguido de uma espera. A interface n\u00e3o precisa adivinhar se a opera\u00e7\u00e3o vai dar certo. O estado do aplicativo passa a existir no dispositivo, e o servidor vira um componente de sincroniza\u00e7\u00e3o, autentica\u00e7\u00e3o, backup e governan\u00e7a, n\u00e3o um porteiro que autoriza cada leitura.<\/p><p>Essa distin\u00e7\u00e3o \u00e9 importante porque muita gente confunde local-first com offline-first, PWA ou cache de navegador. S\u00e3o coisas diferentes. Offline-first melhora a experi\u00eancia quando a conex\u00e3o falha, mas normalmente ainda considera o servidor como autoridade central. J\u00e1 cache e service worker aceleram o acesso a conte\u00fados j\u00e1 buscados, sem alterar o modelo de dados. Local-first, por sua vez, \u00e9 uma arquitetura de dados.<\/p><h3>Local-first n\u00e3o \u00e9 apenas funcionar offline<\/h3><p>Um app pode ser offline-first e continuar dependendo do servidor para decidir o que \u00e9 v\u00e1lido. Um app local-first, por outro lado, precisa aceitar que a escrita ocorre primeiro no dispositivo. Isso muda o fluxo de valida\u00e7\u00e3o, a estrat\u00e9gia de sincroniza\u00e7\u00e3o, o tratamento de conflitos e at\u00e9 a forma de pensar autentica\u00e7\u00e3o e permiss\u00f5es.<\/p><p>Em termos simples: offline-first lida com a aus\u00eancia de rede. Local-first lida com a distribui\u00e7\u00e3o dos dados.<\/p><h2>Por que esse modelo ganhou relev\u00e2ncia<\/h2><p>O interesse em local-first cresceu porque a web amadureceu. Hoje os usu\u00e1rios esperam respostas instant\u00e2neas, uso fluido em m\u00faltiplos dispositivos e colabora\u00e7\u00e3o em tempo real. Al\u00e9m disso, em muitos produtos o dado principal \u00e9 gerado pelo pr\u00f3prio usu\u00e1rio: notas, documentos, quadros de tarefas, rascunhos, anota\u00e7\u00f5es de campo e ferramentas de cria\u00e7\u00e3o.<\/p><p>Quando o valor do app est\u00e1 no conte\u00fado produzido pelo usu\u00e1rio, faz sentido que esse conte\u00fado exista localmente primeiro. Assim, editar um t\u00edtulo, mover um card ou escrever um par\u00e1grafo passa a ser uma opera\u00e7\u00e3o instant\u00e2nea. A sincroniza\u00e7\u00e3o deixa de competir com a intera\u00e7\u00e3o.<\/p><p>Outro ponto relevante \u00e9 a privacidade. Em v\u00e1rios cen\u00e1rios, manter uma c\u00f3pia local dos dados reduz a depend\u00eancia de requisi\u00e7\u00f5es constantes a servidores e d\u00e1 ao usu\u00e1rio mais sensa\u00e7\u00e3o de controle. Para equipes que pensam em resili\u00eancia, a vantagem tamb\u00e9m \u00e9 \u00f3bvia: o sistema continua \u00fatil mesmo se o backend estiver indispon\u00edvel.<\/p><h2>Quando n\u00e3o vale a pena usar local-first<\/h2><p>Uma das maiores armadilhas \u00e9 achar que local-first combina com qualquer projeto moderno. N\u00e3o combina. H\u00e1 contextos em que o custo extra de sincroniza\u00e7\u00e3o e modelagem simplesmente n\u00e3o compensa.<\/p><p>Casos com dados gerados no servidor, como pain\u00e9is anal\u00edticos, feeds sociais ou resultados de busca, geralmente funcionam melhor com arquitetura tradicional baseada em API. Nesses sistemas, o cliente consome um resultado que j\u00e1 nasceu do lado do servidor. Replicar isso localmente n\u00e3o faz sentido.<\/p><p>Tamb\u00e9m n\u00e3o \u00e9 a melhor op\u00e7\u00e3o quando voc\u00ea precisa de consist\u00eancia transacional forte e imediata, como em pagamentos, estoque ou processos banc\u00e1rios. Nesses cen\u00e1rios, uma \u00fanica base autoritativa com garantias ACID continua sendo o caminho mais seguro.<\/p><p>H\u00e1 ainda o custo de complexidade. Se o aplicativo \u00e9 um CRUD simples, usado por poucas pessoas em rede est\u00e1vel e sem necessidade de colabora\u00e7\u00e3o ou uso offline, adicionar um mecanismo de sync pode virar excesso de engenharia.<\/p><h3>Casos em que local-first costuma brilhar<\/h3><ul><li>Aplicativos de notas e documentos;<\/li><li>Ferramentas de colabora\u00e7\u00e3o;<\/li><li>Quadros de tarefas e gest\u00e3o de projetos;<\/li><li>Apps de campo com conex\u00e3o inst\u00e1vel;<\/li><li>Produtos com forte apelo de privacidade;<\/li><li>Experi\u00eancias em que resposta imediata melhora muito a usabilidade.<\/li><\/ul><p>O melhor uso, muitas vezes, n\u00e3o \u00e9 adotar local-first no produto inteiro. \u00c9 aplicar a abordagem em partes espec\u00edficas, como rascunhos offline, edi\u00e7\u00f5es colaborativas ou m\u00f3dulos que realmente ganham com lat\u00eancia quase zero.<\/p><h2>Como os dados ficam armazenados no navegador<\/h2><p>Quando se fala em armazenamento local no navegador, existe uma evolu\u00e7\u00e3o clara. <strong>localStorage<\/strong> \u00e9 simples, mas limitado, s\u00edncrono e inadequado para dados mais s\u00e9rios. Ele serve para prefer\u00eancias pequenas, como tema ou idioma. N\u00e3o deve ser tratado como banco de dados.<\/p><p>O <strong>IndexedDB<\/strong> \u00e9 muito mais capaz, com suporte amplo e armazenamento maior, mas tem uma experi\u00eancia de desenvolvimento ruim quando usado diretamente. A API \u00e9 verbosa, ass\u00edncrona e pouco amig\u00e1vel. Por isso, a maioria das equipes prefere abstra\u00e7\u00f5es sobre ele em vez de trabalhar na m\u00e3o.<\/p><p>Em 2026, a combina\u00e7\u00e3o mais interessante para aplica\u00e7\u00f5es avan\u00e7adas \u00e9 <strong>SQLite rodando no navegador via WebAssembly<\/strong>, com persist\u00eancia no <strong>OPFS<\/strong> (Origin Private File System). Essa combina\u00e7\u00e3o permite usar um banco relacional real no cliente, com transa\u00e7\u00f5es, \u00edndices e consultas SQL, mantendo performance suficiente para apps robustos.<\/p><h3>SQLite no navegador com OPFS<\/h3><p>SQLite em WebAssembly n\u00e3o \u00e9 s\u00f3 uma curiosidade t\u00e9cnica. \u00c9 o que torna vi\u00e1vel trazer para o front-end uma base relacional parecida com a que muita gente j\u00e1 conhece no backend. Com OPFS, o aplicativo consegue persistir arquivos de forma mais eficiente, e isso melhora bastante o uso do banco local.<\/p><p>Na pr\u00e1tica, esse modelo \u00e9 \u00fatil para apps com dados estruturados, relacionamentos e consultas mais complexas. Em vez de gerenciar estados espalhados por v\u00e1rios objetos JavaScript, voc\u00ea deixa o banco local organizar o estado de forma consistente.<\/p><p>O cuidado principal \u00e9 aceitar que ainda existem diferen\u00e7as entre navegadores. Algumas solu\u00e7\u00f5es funcionam melhor em Chrome do que em Safari, e o suporte a certas APIs pode variar. Por isso, aplica\u00e7\u00f5es s\u00e9rias costumam ter caminhos de fallback e monitoramento de erros.<\/p><h3>Compara\u00e7\u00e3o pr\u00e1tica entre op\u00e7\u00f5es comuns<\/h3><table><thead><tr><th>Tecnologia<\/th><th>Melhor uso<\/th><th>Ponto de aten\u00e7\u00e3o<\/th><\/tr><\/thead><tbody><tr><td>localStorage<\/td><td>Prefer\u00eancias simples<\/td><td>Capacidade baixa, s\u00edncrono, n\u00e3o \u00e9 banco<\/td><\/tr><tr><td>IndexedDB<\/td><td>Compatibilidade ampla e dados moderados<\/td><td>API dif\u00edcil e pouca ergonomia<\/td><\/tr><tr><td>SQLite em WASM com OPFS<\/td><td>Apps s\u00e9rios com queries relacionais<\/td><td>Bundle maior e particularidades entre navegadores<\/td><\/tr><tr><td>PGlite<\/td><td>Quem quer compatibilidade com Postgres no cliente<\/td><td>Ecossistema ainda amadurecendo<\/td><\/tr><\/tbody><\/table><h2>O papel da sincroniza\u00e7\u00e3o<\/h2><p>Depois que os dados passam a existir no cliente, surge a parte realmente dif\u00edcil: sincronizar mudan\u00e7as entre dispositivos e usu\u00e1rios. Se duas r\u00e9plicas podem editar o mesmo conte\u00fado, algu\u00e9m precisa reconciliar vers\u00f5es. Esse \u00e9 o cora\u00e7\u00e3o dos sistemas local-first.<\/p><p>Existem caminhos diferentes para isso. Um dos mais conhecidos \u00e9 o uso de <strong>CRDTs<\/strong>, estruturas de dados pensadas para permitir mesclagem autom\u00e1tica de edi\u00e7\u00f5es concorrentes. Outra abordagem \u00e9 a replica\u00e7\u00e3o entre banco local e servidor, com o servidor funcionando como ponto de troca e coordena\u00e7\u00e3o. H\u00e1 ainda modelos baseados em event sourcing, em que o que circula n\u00e3o \u00e9 o estado final, mas o hist\u00f3rico de muta\u00e7\u00f5es.<\/p><p>N\u00e3o existe uma op\u00e7\u00e3o perfeita para todos os produtos. A escolha depende muito do tipo de dado, do padr\u00e3o de colabora\u00e7\u00e3o e da complexidade que voc\u00ea aceita manter no longo prazo.<\/p><h3>CRDTs para colabora\u00e7\u00e3o em tempo real<\/h3><p>CRDTs fazem bastante sentido em cen\u00e1rios como edi\u00e7\u00e3o de texto, documentos compartilhados e experi\u00eancias simult\u00e2neas em que v\u00e1rias pessoas alteram o mesmo conte\u00fado quase ao mesmo tempo. Como a estrutura foi desenhada para aceitar concorr\u00eancia, ela consegue unir altera\u00e7\u00f5es sem exigir um bloqueio central forte.<\/p><p>Na pr\u00e1tica, bibliotecas como Yjs ficaram populares justamente porque entregam uma base s\u00f3lida para esse tipo de colabora\u00e7\u00e3o. O ponto de aten\u00e7\u00e3o \u00e9 que o comportamento pode ficar dif\u00edcil de depurar quando o documento cresce, e a observabilidade da sincroniza\u00e7\u00e3o precisa ser boa.<\/p><p>Esse modelo \u00e9 poderoso, mas n\u00e3o \u00e9 obrigat\u00f3rio para todo app com colabora\u00e7\u00e3o. Em v\u00e1rios produtos, uma replica\u00e7\u00e3o mais simples j\u00e1 resolve melhor.<\/p><h3>Replica\u00e7\u00e3o de banco para banco<\/h3><p>Para a maioria dos aplicativos que n\u00e3o precisam de edi\u00e7\u00e3o simult\u00e2nea em tempo real de texto livre, replicar dados entre banco local e banco remoto costuma ser mais pragm\u00e1tico. Nesse desenho, o cliente usa um banco local, o servidor mant\u00e9m o banco autoritativo ou atua como n\u00f3 de sincroniza\u00e7\u00e3o, e um motor especializado cuida da troca de dados.<\/p><p>Esse caminho tende a ser mais f\u00e1cil de entender, de manter e de ajustar em apps com entidades estruturadas, como tarefas, coment\u00e1rios, projetos e registros de formul\u00e1rio. Em vez de inventar sem\u00e2nticas complexas de merge para qualquer coisa, voc\u00ea controla melhor o que \u00e9 uma linha, o que \u00e9 um campo e o que pode ou n\u00e3o conflitar.<\/p><h3>Event sourcing: \u00fatil, mas nem sempre necess\u00e1rio<\/h3><p>Event sourcing \u00e9 atraente porque registra a sequ\u00eancia de eventos em vez de guardar apenas o estado atual. Isso facilita auditoria, reconstru\u00e7\u00e3o hist\u00f3rica e alguns tipos de integra\u00e7\u00e3o. Por\u00e9m, para aplica\u00e7\u00f5es comuns, esse modelo adiciona complexidade operacional e cognitiva.<\/p><p>Se o seu produto n\u00e3o precisa revisar o passado em detalhes nem reconstruir estados derivados a partir de logs ricos, talvez seja mais sensato replicar o estado atual do que reprocessar eventos a todo momento.<\/p><h2>O que muda na arquitetura do front-end<\/h2><p>Quando o local \u00e9 a fonte prim\u00e1ria de leitura e escrita, muita coisa que virou padr\u00e3o em apps web deixa de ser central. Fetching libraries deixam de ser o cora\u00e7\u00e3o da experi\u00eancia, porque voc\u00ea n\u00e3o est\u00e1 buscando dados a cada intera\u00e7\u00e3o. O estado de UI e o estado de dom\u00ednio se aproximam do banco local.<\/p><p>Na pr\u00e1tica, o front-end passa a refletir o banco quase diretamente. A interface l\u00ea do armazenamento local, muta\u00e7\u00f5es s\u00e3o escritas localmente, e a sincroniza\u00e7\u00e3o roda em paralelo. Isso reduz a necessidade de estados \u201cotimistas\u201d, porque a opera\u00e7\u00e3o j\u00e1 foi aplicada no \u00fanico lugar que importa naquele momento: o dispositivo.<\/p><p>Tamb\u00e9m muda a rela\u00e7\u00e3o com autentica\u00e7\u00e3o. O servidor ainda precisa validar quem pode sincronizar, restaurar backups e acessar recursos compartilhados, mas ele deixa de ser o verificador de cada leitura. Isso exige desenhar regras de acesso com mais cuidado para n\u00e3o abrir brechas de seguran\u00e7a.<\/p><h2>Como pensar conflitos sem exagerar no problema<\/h2><p>Muita gente imagina que conflito de dados em local-first \u00e9 um pesadelo insol\u00favel. N\u00e3o \u00e9. \u00c9 um problema real, mas trat\u00e1vel. O segredo \u00e9 aceitar que conflito n\u00e3o \u00e9 falha do sistema; \u00e9 uma consequ\u00eancia natural de permitir escrita distribu\u00edda.<\/p><p>Em vez de tentar evitar qualquer concorr\u00eancia, o desenho precisa definir o que acontece quando duas r\u00e9plicas alteram o mesmo registro. \u00c0s vezes o campo pode ser mesclado. \u00c0s vezes uma altera\u00e7\u00e3o substitui a outra. Em outros casos, o usu\u00e1rio precisa ver a diverg\u00eancia e escolher manualmente.<\/p><p>O importante \u00e9 modelar conflitos por tipo de dado. T\u00edtulo de tarefa, corpo de texto, etiqueta, posi\u00e7\u00e3o em lista, status, coment\u00e1rio e anexos podem exigir estrat\u00e9gias diferentes. Tratar tudo do mesmo jeito costuma gerar resultados ruins.<\/p><h3>Exemplos de decis\u00f5es de merge<\/h3><ul><li><strong>Texto livre:<\/strong> pode exigir CRDT ou merge colaborativo mais sofisticado;<\/li><li><strong>Campos simples:<\/strong> podem usar \u201c\u00faltima escrita vence\u201d em alguns contextos;<\/li><li><strong>Listas ordenadas:<\/strong> precisam de estrat\u00e9gia clara para posi\u00e7\u00e3o e reordena\u00e7\u00e3o;<\/li><li><strong>Entidades cr\u00edticas:<\/strong> podem continuar sob valida\u00e7\u00e3o forte no servidor.<\/li><\/ul><p>O ponto aqui n\u00e3o \u00e9 romantizar a complexidade, e sim distribu\u00ed-la de forma inteligente. Nem tudo precisa ser reconciliado do mesmo modo, e tentar fazer uma solu\u00e7\u00e3o universal costuma piorar o sistema.<\/p><h2>Boas pr\u00e1ticas para quem quer come\u00e7ar<\/h2><p>Se voc\u00ea quer experimentar local-first, o melhor caminho raramente \u00e9 reescrever o produto inteiro. Comece por uma funcionalidade com alto valor percebido e baixo risco operacional, como rascunhos offline, anota\u00e7\u00f5es ou uma \u00e1rea colaborativa espec\u00edfica.<\/p><p>Tamb\u00e9m vale definir logo no in\u00edcio qual \u00e9 a unidade de sincroniza\u00e7\u00e3o: documento, tarefa, linha de tabela, campo ou evento. Isso ajuda a evitar ambiguidades depois. Outro cuidado importante \u00e9 observar telemetria e falhas com bastante disciplina, porque problemas de persist\u00eancia local costumam ser dif\u00edceis de reproduzir no ambiente do desenvolvedor.<\/p><p>Al\u00e9m disso, planeje fallback. Navegadores diferentes podem tratar APIs de armazenamento com nuances pr\u00f3prias. Quando a persist\u00eancia local falha, o app precisa degradar com eleg\u00e2ncia, e n\u00e3o simplesmente quebrar.<\/p><h3>Checklist pr\u00e1tico<\/h3><ul><li>Escolha um caso de uso realmente compat\u00edvel com dados locais;<\/li><li>Modele bem a estrat\u00e9gia de sincroniza\u00e7\u00e3o;<\/li><li>Planeje conflitos por tipo de conte\u00fado;<\/li><li>Use armazenamento local apropriado, n\u00e3o atalhos fr\u00e1geis;<\/li><li>Teste em navegadores diferentes, especialmente quando houver OPFS ou WebAssembly;<\/li><li>Instrumente erros de escrita e sincroniza\u00e7\u00e3o;<\/li><li>Comece pequeno, com uma funcionalidade isolada.<\/li><\/ul><h2>O futuro prov\u00e1vel do local-first<\/h2><p>O local-first deixou de ser uma ideia s\u00f3 de pesquisa e virou uma op\u00e7\u00e3o real de engenharia. Isso n\u00e3o quer dizer que todas as equipes devam adot\u00e1-lo. Quer dizer que agora existem ferramentas maduras o suficiente para que certas experi\u00eancias funcionem de verdade no navegador, com bancos locais, sync em segundo plano e colabora\u00e7\u00e3o real.<\/p><p>O cen\u00e1rio mais interessante, ao que tudo indica, \u00e9 h\u00edbrido. Muitos produtos v\u00e3o continuar tradicionais na maior parte da aplica\u00e7\u00e3o, usando local-first apenas nos pontos em que a experi\u00eancia do usu\u00e1rio melhora muito. Isso parece mais sustent\u00e1vel do que tentar local-first absoluto em tudo.<\/p><p>Tamb\u00e9m \u00e9 prov\u00e1vel que as ferramentas de sincroniza\u00e7\u00e3o fiquem mais transparentes. Quanto menos a equipe precisar pensar em detalhes de replica\u00e7\u00e3o, melhor. Mas at\u00e9 l\u00e1, entender o modelo de dados, o tipo de conflito e a estrat\u00e9gia de persist\u00eancia continua sendo responsabilidade do time de produto e engenharia.<\/p><table><thead><tr><th>Decis\u00e3o<\/th><th>Quando faz sentido<\/th><\/tr><\/thead><tbody><tr><td>Adotar local-first no app inteiro<\/td><td>Produtos centrados em colabora\u00e7\u00e3o, edi\u00e7\u00e3o e dados do usu\u00e1rio<\/td><\/tr><tr><td>Usar local-first em uma funcionalidade<\/td><td>Quando s\u00f3 uma parte do produto precisa de instantaneidade ou offline<\/td><\/tr><tr><td>Evitar local-first<\/td><td>Dados gerados no servidor, forte consist\u00eancia transacional ou CRUD simples<\/td><\/tr><\/tbody><\/table><p>Quem olha para local-first como m\u00e1gica costuma se decepcionar. Quem olha como uma decis\u00e3o de arquitetura, com pr\u00f3s e contras bem definidos, consegue tirar valor real dela. O ganho mais vis\u00edvel \u00e9 a sensa\u00e7\u00e3o de imediatismo. O ganho mais profundo \u00e9 um aplicativo que continua \u00fatil quando a rede falha, quando o servidor demora e quando o usu\u00e1rio simplesmente quer trabalhar sem esperar permiss\u00e3o para ver o pr\u00f3prio dado.<\/p>","protected":false},"excerpt":{"rendered":"<p>Entenda a arquitetura local-first, os principais componentes, as op\u00e7\u00f5es de armazenamento e os limites reais para apps web modernos. Se voc\u00ea j\u00e1 abriu um app e viu uma tela em branco, um spinner eterno ou uma intera\u00e7\u00e3o lenta porque tudo depende de uma ida ao servidor, j\u00e1 sentiu na pr\u00e1tica o problema que a arquitetura [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":5127,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[120],"tags":[],"class_list":["post-5125","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/posts\/5125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5125"}],"version-history":[{"count":1,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/posts\/5125\/revisions"}],"predecessor-version":[{"id":5126,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/posts\/5125\/revisions\/5126"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/media\/5127"}],"wp:attachment":[{"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sorting.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}