REST vs RESTful: Qual a real diferença? Compartilhando o que aprendi!
Nessa jornada de programação, me deparei com os termos REST e RESTful o tempo todo.
Para ser sincero, eu achava que era "tudo a mesma coisa", mas fui dar uma pesquisada e vi que tem uma diferença sutil, mas que me ajudou a entender melhor como construir APIs.
Queria compartilhar com vocês o que eu entendi.
A analogia que me salvou: A Receita e o Bolo
Pra entender, a analogia que mais fez sentido pra mim foi pensar numa receita de bolo.
REST é a Receita: Pensem no REST (Representational State Transfer) como a receita em si. Ele não é a API, mas um conjunto de boas práticas e regras de arquitetura. É tipo um guia que diz: "Olha, pra sua API ficar bem estruturada, fácil de entender e de dar manutenção, o ideal é seguir esses caminhos aqui."
As "regras" principais dessa receita, pelo que vi, são coisas como: ter uma arquitetura cliente-servidor, não guardar o estado do cliente no servidor (stateless), e o mais importante, ter uma interface uniforme.
RESTful é o Bolo Pronto!
Aí fica fácil, né? Se o REST é a receita, uma API RESTful é o nosso bolo pronto!
É quando a gente pega aquela receita (os princípios REST) e constrói uma API que segue tudo direitinho, aproveitando o que o próprio HTTP já oferece pra gente.
Como isso fica no código?
É aqui que a diferença fica clara. Vamos imaginar uma API simples de "Tarefas" que a gente poderia fazer num projeto.
O jeito que eu talvez fizesse antes de entender isso:
Eu provavelmente criaria URLs que parecem nomes de funções, tipo:
GET /buscartarefas
POST /criarnovatarefa
POST /editartarefa/1
Funciona? Sim. Mas não está usando todo o potencial do HTTP.
Agora, o jeito RESTful de fazer:
A ideia aqui é pensar em "Tarefas" como um recurso. As ações que a gente quer fazer (buscar, criar, editar) são definidas pelos métodos HTTP (GET, POST, PUT, DELETE).
Listar todas as tarefas:
GET /tarefas
Buscar uma tarefa específica:
GET /tarefas/1
Criar uma nova tarefa:
POST /tarefas (e envia os dados no corpo da requisição)
Atualizar uma tarefa:
PUT /tarefas/1 (e envia os dados atualizados)
Excluir uma tarefa:
DELETE /tarefas/1
Perceberam como fica mais limpo e intuitivo? A URL representa o quê (/tarefas) e o método HTTP representa a ação.
É uma diferença pequena no nome, mas que muda o jeito de pensar na hora de construir nossas APIs com qualquer tecnologia/framework.