HATEOAS Explicado: REST API no nível máximo de maturidade

HATEOAS Explicado: REST API no nível máximo de maturidade

O Nível Máximo de Maturidade de uma Hashtag: A Glória d'Oeste

Introdução ao Conceito de Hipermídia

  • O vídeo apresenta o conceito de hipermídia, destacando sua importância e relevância no contexto atual.
  • O termo "reitores" é introduzido como um acrônimo para "raper text at the End of application state", que se refere ao hipermídia como motor de estado da aplicação.
  • A hipermídia é explicada através da navegação em páginas web, exemplificando com o site americanas.com.br.

Funcionamento da Navegação em Páginas Web

  • A navegação em um site é facilitada por links que conectam diferentes produtos e categorias, permitindo acesso fácil a informações relevantes.
  • O usuário não precisa conhecer todos os links; basta acessar a página inicial e navegar pelos links disponíveis.
  • HTML é mencionado como uma linguagem de hipermídia, pois permite a interligação entre diferentes recursos através de links.

Importância dos Links na Navegação

  • Se um produto não está mais disponível, o link correspondente pode deixar de funcionar, evidenciando a dependência do usuário em relação aos links visíveis na página.
  • A ausência de links entre as páginas dificultaria a navegação e tornaria necessário conhecer todas as URLs para efetuar compras.

Interconexão dos Recursos na Web

  • Os links criam uma teia interligada que facilita a navegação entre recursos diversos na web.
  • Sem essa estrutura interconectada, seria complicado acessar diferentes produtos ou serviços dentro do mesmo site.

Aplicação Prática do Conceito em APIs

  • O conceito de hipermídia se aplica também às APIs (Application Programming Interfaces), ajudando os consumidores a descobrir funcionalidades e fluxos de navegação.

Gerenciamento de Ordens de Serviço com API

Acesso e Navegação nas Ordens de Serviço

  • O usuário pode acessar detalhes da ordem de serviço através de um link específico, que também permite visualizar informações do cliente associado.
  • As ordens de serviço possuem diferentes status (cancelada, aberta, finalizada), e o status atual é "aberto", indicando que a ordem ainda não foi finalizada.

Finalização da Ordem de Serviço

  • Para finalizar uma ordem de serviço, o usuário deve clicar em um link específico. Após a ação, o status muda para "finalizado" e a operação é registrada como bem-sucedida.
  • Uma vez que a ordem é finalizada, o link para finalizar novamente desaparece, demonstrando uma vantagem do uso de APIs RESTful: a evolução das operações sem quebrar funcionalidades existentes.

Regras de Negócio e Links

  • Se uma operação precisa ser removida ou alterada devido a regras de negócio, basta não retornar o link correspondente. Isso evita confusões sobre ações permitidas.
  • A ausência do link indica claramente ao usuário que determinada ação não pode ser realizada naquele estado da ordem.

Comparação com Páginas Web

  • Assim como em um site onde produtos fora de estoque não são exibidos, na API os links ausentes garantem que os usuários não tentem realizar ações impossíveis.
  • Essa abordagem simplifica as interações dos consumidores com a API, pois eles apenas seguem os links disponíveis sem precisar implementar regras complexas.

Vantagens da Estrutura Baseada em Links

  • Ao evitar duplicação das regras nos clientes da API, torna-se mais fácil gerenciar alterações nas regras de negócio centralmente no backend.
  • Quando as regras mudam, todos os clientes se atualizam automaticamente desde que respeitem os links fornecidos pela API.

Implementação no Front-end

  • No front-end, botões ou opções só devem ser exibidos quando há um link correspondente disponível na API. Isso garante uma interface limpa e intuitiva para o usuário.
  • Se um botão para finalizar uma ordem estiver presente no front-end mas não houver link na API, ele deve estar desabilitado ou oculto.

Alterações em APIs e a Importância da Hipermídia

Mudanças na Nomenclatura de Serviços

  • Discussão sobre a alteração de "ordens de serviço" para "serviços", destacando que mudanças inadequadas podem quebrar a funcionalidade para os clientes.

Uso de HATEOAS nas APIs

  • A importância do uso de HATEOAS (Hypermedia as the Engine of Application State) é mencionada, onde se destaca que o código deve seguir links corretamente para evitar problemas.

Estrutura do Entry Point

  • Explicação sobre o conceito de entry point em uma API, comparando com a navegação em um site, onde mudanças na URL não afetam o acesso ao conteúdo desde que os links sejam seguidos corretamente.

Necessidade do HATEOAS

  • Pergunta comum sobre a obrigatoriedade do HATEOAS nas APIs; teoricamente, uma API só é considerada REST se implementar hipermídia adequadamente.

Avaliação da Implementação do HATEOAS

  • Reflexão sobre a relação custo-benefício da implementação do HATEOAS, sugerindo que deve ser avaliado caso a caso se realmente traz valor ao projeto.

Modelo de Maturidade das APIs

Níveis de Maturidade segundo Richardson

  • Introdução ao modelo de maturidade proposto por Leonard Richardson, que classifica as APIs em quatro níveis baseados na sua complexidade e uso adequado dos princípios REST.

Classificação das APIs no Mercado

  • O mercado considera apenas os níveis 2 e 3 como verdadeiramente RESTful; níveis 0 e 1 são vistos como rudimentares.

Especificações para Hipermídia

  • Discussão sobre como as especificações definem como representar links dentro dos recursos JSON; não é obrigatório seguir uma especificação específica, mas existem padrões recomendados.

Principais Especificações para Formatos de Hipermídia

Hall Hypertext Application Language (HAL)

  • Apresentação da HAL como uma das principais especificações utilizadas atualmente para descrever recursos e seus links em formato JSON.

Outras Especificações Relevantes

  • Menção a outras especificações como "All forms" e "Uber", além da possibilidade de criar formatos próprios, embora seja recomendado usar padrões adotados pela comunidade.

Exemplo de Representação em Hipermídia

Representação de Recursos

  • O apresentador discute um exemplo de representação utilizado, mencionando que não está claro qual especificação de paredes é usada para representar a hipermídia.
  • É destacado que a URL do recurso (um GIF) permite navegar para outros recursos e executar várias ações, evidenciando o uso da hipermídia.
  • A maioria das implementações no mercado não utiliza hipermídia, com o iFood sendo um exemplo que possui uma API disponível, mas sem links dinâmicos.

Limitações na Implementação

  • A documentação do iFood não apresenta links dinâmicos; as URLs são fixas no código, o que pode causar problemas se houver mudanças nos nomes dos recursos.
  • O apresentador menciona a preocupação com a manutenção das URLs fixas para evitar quebrar clientes existentes, ressaltando a importância da estabilidade nas APIs.

Implementação com Spring

  • O vídeo não aborda detalhadamente como implementar essa funcionalidade, mas sugere deixar comentários caso haja interesse em aprender sobre isso usando Spring.
  • É mencionado o projeto Spring Redis como uma ferramenta útil para criar representações RESTful seguindo os princípios da web.

Convite para Cursos

  • O apresentador convida os espectadores a participar de um curso online gratuito sobre Spring REST, fornecendo um link na descrição do vídeo.
Video description

Curso Gratuito Mergulho Spring REST: http://alga.works/msr-yt Curso Imersivo Especialista Spring REST: http://alga.works/esr-yt Você desenvolve REST APIs no nível máximo de maturidade, com Hypermedia? Nesse vídeo você vai entender o que é e como funciona HATEOAS e porque você deveria aprender a implementar REST APIs com esse nível máximo de maturidade. Instagram: https://instagram.com/alga.works Blog: http://alga.works/blog-yt Mergulhe fundo com nossos cursos online de Java e Front-end: http://alga.works/site-yt #hateoas #hypermedia #restful #algaworks