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.