REST - Níveis de maturidade de Richardson


Hoje vou apresentar os conceitos sobre os níveis de maturidade de Richardson para as API REST.

O REST (REpresentational State Transfer) é um estilo de arquitetura popular para projetar serviços da web para buscar ou alterar dados remotos. APIs em conformidade com a estrutura REST são consideradas mais maduras porque oferecem facilidade, flexibilidade e interoperabilidade.

O Modelo de Maturidade Richardson é um modelo de maturidade sugerido em 2008 por Leonard Richardson que classifica APIs da Web com base em sua aderência e conformidade com cada um dos quatro níveis do modelo.

A maturidade de um serviço é baseada em três fatores neste modelo: URI, Métodos HTTP e HATEOAS (Hipermídia). Se um serviço emprega essas tecnologias, ele é considerado mais maduro. Este modelo cobre apenas o estilo de arquitetura da API, não a modelagem de dados ou outros fatores de design.

A figura abaixo mostra o Modelo de Maturidade de Richardson:

A figura mostra que o Modelo de Maturidade de Richardson possui 4 níveis de maturidade a partir do menor para o maior.

  1. Nível-0: Pântano de POX: O menor nível de conformidade com o estilo de arquitetura REST. Normalmente expõe apenas um URI para todo o aplicativo. Usa HTTP POST para todas as ações, mesmo para busca de dados. Os aplicativos baseados em SOAP ou XML-RPC estão neste nível. POX significa Plain Old XML.  (Não usa recursos de URI, métodos HTTP nem HATEOAS)
     
  2. Nível 1: Recursos baseado em Endereço/URI: Esses serviços empregam vários URIs, ao contrário do Nível 0. No entanto, eles usam apenas HTTP POST para todas as operações. Cada recurso é identificável por seu próprio URI exclusivo, incluindo recursos aninhados. Este endereçamento baseado em recursos pode ser considerado o ponto de partida para APIs serem RESTful.
     
  3. Nível 2: verbos HTTP:  As APIs neste nível utilizam totalmente todos os comandos HTTP ou verbos, como GET, POST, PUT e DELETE. O corpo da solicitação não carrega as informações de operação neste nível. Os códigos de retorno também são usados corretamente para que os clientes possam verificar se há erros.
     
  4. Nível 3: HyperMedia / HATEOAS: Este é o nível mais maduro que usa HATEOAS (Hypertext As The Engine Of Application State). É também conhecido como HyperMedia, que consiste basicamente em links de recursos e formulários. Estabelecer conexões entre recursos torna-se fácil, pois eles não requerem intervenção humana e auxiliam na automação orientada para o cliente.

Acima do nível 3 temos o que é chamado a Glória do REST. Um exemplo disso seria usar o Swagger para documentar a sua API após ter implementando o HATEOAS; outro recurso a mais seria implementar o limite de envio de requisições por assinatura.

A seguir veremos exemplos de serviços em cada nível de maturidade

Muitos serviços online pertencem ao Nível 0 ou 1, como o Google Search Service (agora obsoleto) e sites baseados em Flash. No entanto, eles estão lentamente sendo eliminados.

Se você estiver projetando um serviço monolítico que executa apenas uma função principal, provavelmente uma API de nível 0 seria suficiente, pois não há necessidade de vários URIs.

O nível 0 é adequado para um serviço de propósito de curto prazo que não deve ser estendido ou atualizado. Pense em um site de declaração de resultados de exame como um exemplo. Seu uso é restrito a alguns dias quando ainda houver resultados. Depois disso, ele se tornaria inativo e irrelevante. O serviço da web executa apenas uma função: ele retorna o estado de aprovação / reprovação de um aluno individual. Se alguns recursos forem acessados, o Nível 1 pode ser empregado.

Assinaturas populares baseadas em nuvem, como serviços móveis, streaming de conteúdo da web(NETFLIX) e produtos de automação de escritório, são essencialmente projetados com APIs em conformidade com os Níveis 2 e 3 do modelo.

Os aplicativos escolhem o Nível 2 ou 3 devido a alguns fatores adicionais : (1) Precisam trabalhar mesmo com largura de banda limitada e recursos de computação (2) Confiar no cache para maior desempenho (3) Possuem Operações sem estado

Existe outro modelo chamado Amundsen Maturity Model, que classifica APIs com base em sua abstração de modelo de dados. Em níveis mais altos deste modelo, a API é mais desacoplada dos modelos internos ou detalhes de implementação mas isso é assunto para outro artigo.

E estamos conversados...

"Eu rogo por eles; não rogo pelo mundo, mas por aqueles que me deste, porque são teus.
E todas as minhas coisas são tuas, e as tuas coisas são minhas; e neles sou glorificado."
João 17:9,10

Referências:


José Carlos Macoratti