AFAIK Fielding não alegou que o REST era bom, ele estava apenas descrevendo a arquitetura de fato da web.
Isso subestima um pouco, eu acho. Afinal, o REST é uma enumeração do estilo de arquitetura que Fielding estava usando como arquiteto-chefe da especificação HTTP / 1.1 .
Mas existe realmente alguma razão para pensar que o REST é uma arquitetura desejável para esse domínio? Existe alguma evidência que diga HATEOAS é um princípio de projeto benéfico para a comunicação máquina a máquina?
"Depende". HATEOAS faz parte da restrição de interface uniforme do REST.
Ao aplicar o princípio de generalidade da engenharia de software à interface do componente, a arquitetura geral do sistema é simplificada e a visibilidade das interações é aprimorada. As implementações são dissociadas dos serviços que prestam, o que incentiva a capacidade de evolução independente. A desvantagem, no entanto, é que uma interface uniforme degrada a eficiência, uma vez que as informações são transferidas de forma padronizada, e não específica para as necessidades de um aplicativo. A interface REST foi projetada para ser eficiente para a transferência de dados hipermídia de alta granularidade, otimizando para o caso comum da Web, mas resultando em uma interface que não é ideal para outras formas de interação arquitetural.
Então, vamos pensar por um momento sobre o que isso significa. Quando estou tendo problemas com meu roteador sem fio, posso me comunicar com ele usando o mesmo navegador usado para enviar respostas para o stackexchange. Em particular, não importa qual navegador estou usando ou se meu navegador está algumas atualizações atrasado (ou à frente) do que o roteador está esperando. Não importa que a organização de engenharia que criou o navegador seja completamente independente da organização que criou a interface do roteador.
Isso simplesmente funciona .
Naturalmente, não é universal. Fielding, em 2008 , escreveu:
Isso não significa que acho que todos deveriam projetar seus próprios sistemas de acordo com o estilo de arquitetura REST. O REST é destinado a aplicativos baseados em rede de longa duração que abrangem várias organizações. Se você não vê a necessidade das restrições, não as use.
As restrições que formam o estilo arquitetônico REST foram escolhidas para as propriedades que eles induzem; se essas propriedades não forem valiosas para o seu caso de uso, considere a possibilidade de eliminar as restrições correspondentes.
Onde máquina para máquina fica difícil, é que você perdeu a capacidade do ser humano de combinar com a semântica fornecida pelas representações. Os clientes podem entender apenas os tipos de mídia, mas normalmente temos um ser humano observando as dicas semânticas para obter significado.
O schema.org é parte de um esforço para criar um vocabulário legível por máquina; os agentes da máquina usam o cliente para encontrar as dicas semânticas e aplicam seu próprio entendimento do significado para escolher as ações corretas a serem executadas.
Mas é trabalho; você precisa investir no desenvolvimento de representações amigáveis à máquina de seus recursos e garantir que essas representações permaneçam compatíveis com versões anteriores e anteriores, para que os clientes possam ser desenvolvidos de forma independente.
Quando uma única organização controla o cliente e o servidor, os benefícios dessa independência são muito menores; nesse caso, a restrição pode não ser uma opção arquitetural apropriada.