DEV Community

Carlos Viana
Carlos Viana

Posted on

O que é REST ?

REST (Representational State Transfer) é um estilo arquitetural para sistemas distribuídos, amplamente usado em APIs web. Ele define um conjunto de princípios para criar serviços que sejam escaláveis, simples e interoperáveis. Aqui está uma explicação clara e concisa:

Princípios do REST:

  1. Arquitetura Cliente-Servidor: Separa o cliente (que faz requisições) do servidor (que processa e responde), permitindo independência entre eles.
  2. Stateless (Sem Estado): Cada requisição do cliente ao servidor deve conter todas as informações necessárias para ser processada. O servidor não armazena estado entre requisições.
  3. Cacheable (Cacheável): Respostas podem ser armazenadas em cache para melhorar a performance, desde que indicadas como cacheáveis.
  4. Interface Uniforme: Define padrões para interações, como:
    • Recursos: Tudo é tratado como um recurso (ex.: usuário, produto), identificado por URLs.
    • Métodos HTTP: Usa métodos padrão (GET, POST, PUT, DELETE) para operar nos recursos.
    • Representações: Recursos são representados em formatos como JSON ou XML.
    • HATEOAS (opcional): Respostas incluem links para ações relacionadas, guiando o cliente.
  5. Sistema em Camadas: O sistema pode ser dividido em camadas (ex.: balanceador de carga, servidor de app), mas o cliente não precisa saber disso.
  6. Código Sob Demanda (opcional): Servidores podem enviar código executável (ex.: JavaScript) para o cliente, mas é raro (nunca usei).

Como Funciona:

  • Recursos: Um recurso (ex.: /users/123) é identificado por uma URL única.
  • Métodos HTTP:
    • GET: Recupera dados (ex.: GET /users/123 retorna o usuário 123).
    • POST: Cria um recurso (ex.: POST /users cria um novo usuário).
    • PUT: Atualiza um recurso (ex.: PUT /users/123 atualiza o usuário 123).
    • DELETE: Remove um recurso (ex.: DELETE /users/123 deleta o usuário 123).
  • Respostas: O servidor retorna dados (geralmente em JSON) e códigos de status HTTP (ex.: 200 OK, 404 Not Found).

Exemplo Prático:

Imagine uma API para gerenciar livros:

  • GET /books: Lista todos os livros.
  • GET /books/1: Retorna detalhes do livro com ID 1.
  • POST /books: Cria um novo livro com os dados enviados no corpo da requisição.
  • PUT /books/1: Atualiza o livro com ID 1.
  • DELETE /books/1: Deleta o livro com ID 1.

Benefícios:

  • Escalabilidade: Por ser stateless, é fácil adicionar servidores (Usando um balanceador de carga que distribui o tráfego de rede entre múltiplos servidores, garantindo que nenhum servidor fique sobrecarregado e otimizando o desempenho).
  • Simplicidade: Usa padrões web existentes (HTTP, URLs).
  • Flexibilidade: Suporta vários formatos (JSON, XML) e clientes (web, mobile).
  • Interoperabilidade: Funciona em qualquer plataforma que suporte HTTP.

Limitações:

  • Latência: Múltiplas requisições podem ser necessárias para operações complexas.
  • Complexidade em HATEOAS: Implementar links dinâmicos pode ser desafiador.
  • Não é ideal para sistemas com estado: Como chats em tempo real (WebSocket ou GraphQL podem ser melhores).

Top comments (0)