Modelo de Maturidade de Richardson: Entenda os 4 Níveis de REST
O Modelo de Maturidade de Richardson, criado por Leonard Richardson, é uma forma de avaliar o quão RESTful uma API é. Ele mede o grau de aderência aos princípios do REST, dividindo a maturidade em quatro níveis (0 a 3) — do menos ao mais alinhado ao estilo arquitetural REST.
Nível 0 – The Swamp of POX (Pântano de POX)
- 
Descrição: APIs neste nível usam o HTTP apenas como transporte, sem aplicar os princípios do REST. É comum ter um único endpoint e um único método HTTP (geralmente 
POST) para todas as operações, lembrando chamadas RPC. O termo POX significa Plain Old XML, mas também pode envolver JSON ou outros formatos. - 
Características:
- Um único URI (ex.: 
/api) para qualquer requisição. - Uso exclusivo de 
POST. - Não aproveita recursos do HTTP (métodos, códigos de status etc.).
 - Respostas trazem resultados de ações, não representações de recursos.
 
 - Um único URI (ex.: 
 Exemplo:
  POST /api
  <action>getUser</action>
  <id>123</id>
- Problema: Baixa interoperabilidade, difícil manutenção e pouca escalabilidade.
 
Nível 1 – Recursos
- Descrição: O primeiro passo rumo ao REST. Aqui, a API identifica recursos individuais por URIs distintas, mas ainda não usa corretamente os métodos HTTP.
 - 
Características:
- Recursos possuem URIs próprias (ex.: 
/users/123). - Geralmente ainda usa apenas 
POSTpara qualquer ação. - Não diferencia operações por métodos HTTP.
 
 - Recursos possuem URIs próprias (ex.: 
 Exemplo:
POST /users/123tanto para obter quanto para atualizar o usuário 123.Benefício: Organiza melhor os dados e facilita a identificação de recursos.
Limitação: Ainda ignora a semântica do HTTP.
Nível 2 – Verbos HTTP
- 
Descrição: Aqui, a API usa métodos HTTP corretamente (
GET,POST,PUT,DELETE) e passa a explorar códigos de status HTTP. Muitas APIs REST modernas ficam nesse nível. - 
Características:
- Métodos alinhados às operações:
 - 
GET /users/123→ obtém usuário. - 
POST /users→ cria usuário. - 
PUT /users/123→ atualiza usuário. - 
DELETE /users/123→ remove usuário. - Uso de códigos HTTP (200, 201, 404, 400 etc.).
 - URIs representam recursos, não ações.
 
 Exemplo:
GET /books/1retorna um livro com status200 OK.
POST /bookscria um novo livro e retorna201 Created.Benefício: Maior clareza, interoperabilidade e aderência ao protocolo.
Limitação: Ainda não fornece navegação entre recursos.
Nível 3 – HATEOAS (Hypermedia as the Engine of Application State)
- Descrição: O topo da maturidade REST. A API oferece links nas respostas para guiar o cliente na interação com outros recursos. Assim, o cliente descobre as possibilidades de forma dinâmica, como navegamos na web.
 - 
Características:
- Respostas incluem links para ações relacionadas.
 - Cliente não precisa conhecer URIs fixas.
 - A API conduz a navegação via hipermídia.
 
 Exemplo:
  {
    "id": 123,
    "name": "John",
    "_links": {
      "self": { "href": "/users/123" },
      "orders": { "href": "/users/123/orders" },
      "delete": { "href": "/users/123", "method": "DELETE" }
    }
  }
- Benefício: Máxima flexibilidade, descoberta de funcionalidades e resiliência a mudanças.
 - Limitação: Complexo de implementar e muitas vezes desnecessário em APIs simples.
 
Resumo dos Níveis
- Nível 0 → HTTP como transporte, sem recursos nem métodos (RPC-like).
 - Nível 1 → Recursos com URIs, mas uso limitado do HTTP.
 - Nível 2 → Métodos e códigos HTTP corretos (padrão mais comum).
 - Nível 3 → HATEOAS e navegação dinâmica.
 
Observações
- Nível 2 atende à maioria dos casos: Embora o Nível 3 seja o ideal para APIs realmente autodescritivas, ele é mais complexo e raramente essencial.
 - Use como guia, não como regra: O nível ideal depende do projeto, prazos e objetivos.
 
📚 Saiba mais: Richardson Maturity Model – Martin Fowler
    
Top comments (0)