Executando verificação de segurança...
4

Oi @GheistLycis,

Eu sou o interlocutor mencionado no artigo e, por conta disso, acho importante esclarecer alguns pontos que podem gerar mal-entendidos.

Antes de tudo, é importante separar conceitos diferentes para não colocar todas as controvérsias no mesmo balaio.

Um conceito fundamental é o REST. REST é um estilo arquitetural descrito na dissertação de Roy Fielding, um dos autores das RFCs que definiram o protocolo HTTP — parte essencial do que chamamos de Web.

Quando ele escreveu essa dissertação (e as primeiras RFCs da Web), JSON ainda não existia. Mas o HTML já existia, assim como todo o conjunto de ideias que compõem os sistemas hipermídia (hypermedia): documentos com diferentes representações interligados por meio de URLs.

Os clientes que acessavam esses sistemas — chamados de User Agents — eram, principalmente, os navegadores (browsers).

Nesse ponto da história, a Web já funcionava perfeitamente com sua arquitetura REST (embora o termo ainda não tivesse sido cunhado), com servidores e clientes se comunicando sem necessidade de JavaScript ou JSON (que sequer existia).

Com o tempo, a Web evoluiu de um sistema hipermídia para uma plataforma de aplicações. Essa evolução foi rápida — mais rápida do que os servidores e navegadores conseguiam acompanhar.

Essas limitações impediam o desenvolvimento de certos tipos de aplicação, até que o Google implementou um “hack” usando uma extensão peculiar do JavaScript chamada XMLHttpRequest para seu cliente de e-mail, o Gmail. Assim nasceu uma revolução no desenvolvimento Web. Vale notar: o nome do objeto é XML — não JSON.

Esse recurso, junto com o surgimento da excelente engine V8, possibilitou uma Web muito mais dinâmica, onde aplicações com interfaces complexas — como Onshape, Figma, Miro e Google Docs — passaram a ser inteiramente implementadas em JavaScript, no cliente, com altíssima responsividade.

Foi aí que surgiram as primeiras SPAs (Single-Page Applications). Pareciam uma ideia genial! Finalmente, desenvolver para a Web se parecia com desenvolver para desktop. O backend poderia ser apenas uma interface para o armazenamento, enquanto tudo rodava no cliente. E o JSON nascia como um formato leve para transportar dados, sem se preocupar com semântica.

Com o Node.js, então, bastava aprender uma linguagem: JavaScript.

O problema começou quando essa abordagem se tornou a única forma possível de se desenvolver para a Web.

Se é verdade que, para fazer um Miro, Figma ou Google Sheets, rodar tudo no cliente é vantajoso (se não a única opção) — quais são as vantagens dessa abordagem para uma aplicação corporativa que, na prática, é apenas um CRUD um pouco mais sofisticado?

Evitar recarregar a página inteira ao clicar em “Salvar” porque isso seria “lento”? Honestamente, quantas vezes você viu um spinner girando na tela enquanto a API demora para responder? De que adianta reimplementar em JavaScript algo que qualquer navegador moderno já faz “de fábrica” — renderizar um HTML pronto — se o tempo total para receber e processar um JSON (deserializar, injetar no DOM, renderizar via JS) é o mesmo?

Sim, o ecossistema de JS (e TS) evoluiu muito. Mas os navegadores também evoluíram — e os protocolos idem (já leu sobre HTTP/3 e QUIC e suas capacidades de comunicação assíncrona e paralela?).

Se usarmos a Web como ela foi concebida — com navegadores e servidores modernos, boa arquitetura (cache, CDNs, workers, microfronts etc.) — é bem provável que o seu projeto precise de muito menos JavaScript do que você imagina.

É claro que não estou dizendo que dá para desenvolver tudo na Web sem JS (embora esse seja meu sonho). JavaScript é — e continuará sendo — necessário em vários pontos. A questão é: precisamos usar JS para tudo? Precisamos reimplementar, em JS, coisas que o navegador já faz?

Deixo um desafio: tente desenhar suas aplicações Web sempre se perguntando:

“Como eu faria isso funcionar em um navegador com o JavaScript completamente desabilitado?”

A discussão sobre monólito vs. microserviços, mencionada pelo @GheistLycis, é independente dessa aqui — e grande demais para caber neste comentário. Posso falar sobre isso depois: já tive sucesso com um projeto em microserviços, e no projeto atual estou fazendo o caminho inverso (microserviços → monólito). Cada caso pede uma arquitetura diferente. O importante é refletir profundamente sobre o problema antes de decidir.

Por fim, gostaria de dizer que alguns comentários deste post refletem muito bem o que tentei explicar (por exemplo, o do @thiagoandre).

Aos que pedem exemplos práticos: eles ainda são poucos, porque essa discussão — que propõe um “retorno às origens” — é relativamente recente (surgiu por volta da pandemia) e nasceu de forma “tumultuada”, muito por causa do tom irreverente da turma do HTMX, principal proponente dessa abordagem.

Para quem quiser se aprofundar, seguem algumas referências:

  • Fielding’s Dissertation — dissertação que introduz o conceito de REST.
  • Hypermedia Systems — livro gratuito dos criadores do HTMX, que fundamenta vários conceitos abordados aqui (como HATEOAS).
  • A Web é uma API — slides da minha palestra sobre a ideia de criar APIs que também funcionem como aplicações Web. Faz par com meu projeto Toy, que apresentarei como tutorial na Python Brasil 2025 em outubro. Há também o vídeo dessa palestra.

Esse texto foi revisado e as ênfases foram dadas pelo ChatGPT.

Carregando publicação patrocinada...