React está querendo tornar "APIs" algo obsoleto?
Turma, assisti ontem o vídeo React Is A Backend Framework Now (React É Um Framework Backend Agora) e me deixou bastante pensativo sobre o que pode acontecer com o mundo dos frameworks de desenvolvimento web, principalmente se iremos dar um loop e voltar para onde tudo começou.
Digo isso, pois quem pegou a época do ASP.NET sabe que a tentativa do React com o React Server Components é muito similar com o que aconteceu naquela época. Na verdade, é a mesma coisa, porém com uma stack que possibilita uma abstração diferente por conta do modelo de componetização que o React fornece.
De qualquer forma, para quem não era daquela época, a ideia era escrever páginas interativas, onde o Frontend se comunicava com o Backend para buscar novos dados de forma 100% transparente, onde a "ida, volta e atualização" era controlada pelo .NET. Você como autor do programa não precisava, por exemplo, criar uma API REST ou nenhuma outra forma de comunicação entre o client
e server
, pois tudo isso já estava abstraído e resolvido.
Fim da história: falhou. Não me lembro exatamente o que aconteceu, mas lembro que para a época, no contexto web pelo menos, o .NET ficou algo completamente "bloated" (inchado) e que fez PHP continuar ganhando muito espaço por ser algo mais simples, mais cru, com menos mágica. E para contribuir com essa falha, os principais problemas da época como Blog, Fórum, E-commerce e outros sistemas, foram resolvidos por sistemas open source construídos em PHP, e que simplesmente dominaram o mercado.
Mas os desenvolvedores que usavam PHP, principalmente nessa época, causavam problemas naturalmente, onde um deles era que, em arquivos que montavam uma interface HTML, por exemplo, era costume também fazer consultas diretamente ao banco de dados e isso criava vários efeitos colaterais ruins. Um deles era a impossibilidade de reaproveitamento de código, dado que estava tudo misturado, não havia uma definição de responsabilidade de cada parte do sistema. Outro problema era que tudo isso se tornava difícil de testar de forma automatizada, pois um teste E2E que faz o assert
do resultado de um HTML é algo mais frágil que até também um teste E2E, mas que faz o assert
contra a resposta REST de uma API.
Fora que, sem API, você não conseguia engatar outros clients
no seu Backend, pois ele estava misturado com o Frontend em HTML. A importância disso ficou ainda mais destacada quando os aplicativos móveis inundaram o mercado e era necessário construir uma API em paralelo ao Backend que geravam as páginas web, para ser possível consumir os mesmos dados que estas páginas consumiam.
Então por muito tempo, misturar as camadas Backend, Transporte de Informações e Frontend foi algo banido na comunidade de desenvolvimento ou, ao menos, muito mal visto... o que nos leva ao print abaixo:
O componente Tweets
está fazendo diretamente uma consulta ao banco de dados, e logo abaixo fazendo um map do resultado, e isto vai aparecer no Frontend e não vai expor nada da query
que está ali... apenas o resultado retornado pelo componente vai ser transmitido para o Frontend.
Isso funciona sem expor dados sensíveis do backend, porque daqui para frente qualquer componente do React (pelo menos no Next.js) será considerado por padrão um Server Component e caso você queira que seja considerado um Client Component, no arquivo deste componente, você deve escrever no topo a string "use client"
.
O interessante disto, é que você pode misturar componentes Servers e Clients, como por exemplo, dentro deste componente Tweets
que está no server, você pode colocar um componente que está no client e fazer ele receber, por props
, os dados do Backend, e isso será transmitido de forma "100% transparente para o frontend".
Como eu já ouvi essas palavras em outro lugar, isso me dá um certo calafrio 😂
Mas que fique claro que não estou lutando contra o React Server Components, não tenho motivo algum para isso, a não ser dúvidas sobre outros efeitos colaterais que amarrar o código Front/Back dessa forma causa, como por exemplo, perder a flexibilidade de engatar outros clients
.
Então dado a isso eu pergunto: o que você está achando desta estratégia? Qual sua experiência com o passado da tecnologia e que pode contribuir com essa discussão, ou até qual sua experiência com o React Server Components até agora e o que está achando disso?