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

Válidações, no back-end ou no front-end?

Essa foi uma das dúvidas que tive quando desenvolvi minha primeira aplicação full-stack e acredito que se você está iniciando sua primeira aplicação full-stack, também esteja com essa dúvida.

Antes de responder a pergunta sobre onde ficam as validações, é importante ressaltar que não existe uma solução perfeita, e diferentes abordagens podem funcionar melhor para diferentes casos. No entanto, a minha sugestão seria que você faça validações tanto no front-end quanto no back-end.

Algumas pessoas podem achar que é trabalhoso ter que fazer as regras duas vezes, mas existem boas razões para essa escolha. Se a regra de negócio estiver apenas no back-end, a validação só acontecerá depois que a requisição for feita, ou seja, depois que o cliente clicar em "enviar" no formulário. Isso pode levar a uma experiência ruim para o usuário, que terá que esperar a requisição ser processada antes de receber um feedback sobre o preenchimento correto do formulário. Além disso, em casos em que a aplicação é "serverless" e você paga por quantidade de requisições, essa abordagem pode se tornar custosa.

Por outro lado, colocar as regras de validação no front-end permite que você evite requisições desnecessárias, e pode dar ao usuário feedback imediato sobre o preenchimento correto do formulário. Por exemplo, se o usuário sair do campo "nome" sem preenchê-lo, ele pode receber um feedback em tempo real informando que o campo é obrigatório.

Dessa forma, minha sugestão seria que você fizesse as validações tanto no front-end quanto no back-end. Isso pode ser um pouco mais trabalhoso, mas pode resultar em uma melhor experiência para o usuário e em economia de custos, além de garantir que suas regras de negócio estejam protegidas de potenciais ataques de usuários mal-intencionados.

Carregando publicação patrocinada...
2

Primeiro ponto importante: deve haver validação no backend sempre. A não ser que não seja validação de fato.

Todo dado que entra no servidor deve ser validado, ainda que em alguns casos minimamente. E a estratégia deve ser recusar tudo que não atenda certos critérios, só provando que está ok é que deve ser aceito.

Não vou entrar em detalhes aqui porque já respondi antes.

O uso da validação no cliente é meramente questão de UX, em quase todos os casos. UX é muito importante e muito programador deixa de lado.

Validar só no backend, ainda que em fases diferentes, pode ser bem efetivo em UX e facilidade de programação. Em alguns casos pode ser muito mais vantajoso, e isso muitas pessoas não percebem porque lidam com o "99%", e não se importam com o "1%" que vai sofrer. Isso não é UX. Fica assim, mas a pessoa não consegue ver porque pra ela e muita gente está bom:

Carro Fiat 147 todo detonado andando pelas ruas

Como sempre, depende, mas sem extensiva experiência as pessoas decidem errado, em geral não considerando todas as situações.

Validar no backend pre submit pode ser melhor que validar só no frontend. Note que validar no backend post submit não está em discussão, conforme o início desta resposta. As pessoas esquecem que podem dar boa UX, até melhor em certas situações, sem usar o frontend.

Tem a questão do custo. Mas aí pode então ter sido uma decisão errada escolher algo que custa caro. Eu sempre falo que as pessoas tomam uma decisão errada, casam com ela, ou seja, se comprometem com o erro, e aí passa ter que fazer um monte de ações para compensar ou deixam algum problema pendurado na solução dela. Por isso não canso de dizer que tem que deixar modinha de lado e tomar decisões de engenharia real.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1
1

Nos dois!

Nem todo usuário é bem intencionado, ou sabe o que precisa fazer.
Valide sempre nas duas pontas, aliás valide sempre que um dado trafegar de uma entidade para outra.

Usuário digitou input, valida!
O dado chegou na controller, valida!
o backend enviou algo pra sua Api, valida!
Requisição pra escrever no banco, valida....

e por ai vai...

1

Também acho que o ideal é em ambos os lados, aí o JS brilha, dá pra reaproveitar codigo de validações. Inclusive lembrei que há um banco do governo que não faz validações no back, você consegue adulterar o formulário para cadastrar ou retificar informações de funcionários que não são permitidas...

1

Quando vc disse "Regra de negócio" achei que era algo mais profundo que apenas "requisito de formulário".
Mas sim, front e back devem fazer tratativas.

O front pois, como você mesmo disse, dá um feedback imediato para o usuário. Seria horrivel ter "botões" num site que o front te permite clicar, mas o back não executa ação pq vc "não tem credenciais necessárias", é melhor que nem apareçam então.

Mas como é sempre possível quebrar o front end, o back deve revalidar tudo, para evitar vazamento de dados sensíveis, ou até mesmo "quebrar" o site.

1
1

Regra de negócio não é a mesma coisa que validação de form. Se você colocar regra de negócio no front, o sistema será hackeado ou plagiado.

Então vamos seguir com validação de forms/interações do usuário. Se você puder escolher apenas um lugar, escolha o back, pelos mesmos motivos que no parágrafo anterior.

Validar no front acelera a interatividade com o usuário, melhorando a experiência geral. O usuário nem saberá explicar e provavelmente a maioria nem manifestará. Mas terá uma experiência melhor, mais óbvia, fluida.

2
1
1

Em um dos vídeos do Fabio Akita, ele comenta a respeito disso:

No front-end, você tem que assumir que tudo que vem do cliente é lixo, que todo mundo é hacker tentando encontrar uma brecha. E se você está no back-end, tem que assumir que tudo que vem do front-end também é lixo, que ninguém fez validação de nada.