Qual é o benefício da hipermídia (HATEOAS)?

17

Não compreendo o benefício do HATEOAS para APIs destinadas ao uso por programas (em oposição a seres humanos que navegam diretamente na API). Claro, o cliente não está vinculado a um esquema de URL, mas a um esquema de dados que é a mesma coisa em minha mente.

Por exemplo, suponha que eu queira visualizar um item em um pedido, suponha que eu já tenha descoberto ou saiba o URL do pedido.

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

não HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

No primeiro modelo, eu tenho que saber o fato de que o objeto order possui um campo itemURL. No segundo modelo, eu tenho que saber como construir uma URL de item. Nos dois casos, tenho que "saber" alguma coisa com antecedência, então o que a HATEOAS está realmente fazendo por mim?

Ritmo
fonte
1
get(orderURL);deveria estar lhe dizendo the fact that the order object has an itemURL field.
Yannis 18/05/12
Quando você escreve o aplicativo cliente, precisa saber com antecedência qual é o campo.
Pace
8
Como um aplicativo deve obter o item de um pedido se ele nem sabe que um pedido tem um item? A descoberta funciona para navegação manual, mas não para aplicativos automatizados.
Pace
O próprio homem falando sobre isso aqui: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Respostas:

6

Uma diferença é que o esquema é esperançosamente um padrão, ou pelo menos pode ser reutilizado por outros.

Por exemplo, digamos que você esteja usando a API do Twitter e também queira dar suporte ao StatusNet (ou melhor). Como eles usam o mesmo modelo de dados do Twitter, se a API seguir o HATEOAS, você precisará alterar o URL principal. Caso contrário, agora você precisa alterar cada URL único do código.

Obviamente, se você precisar alterar o código para inserir o URL do ponto de entrada do serviço, pode não parecer tão útil. Realmente brilha é se esse URL é inserido dinamicamente; por exemplo, se você estivesse criando um serviço como o Twillio, que interagisse com a própria API do usuário.

André Paramés
fonte
Esse é um ponto interessante que eu não havia considerado.
Pace
@YannisRizos: Hmm, eu não vejo onde eu disse que HATEOAS é um padrão. Eu disse que "o esquema (dados) é esperançosamente um padrão". Na terminologia REST, esse seria o tipo de mídia.
André Paramés
Na segunda leitura, você está absolutamente certo.
Yannis 18/05/12
2
Sim, se você assumir que os nomes de rel dos links são os mesmos. Mas falando em geral, e não apenas no exemplo específico que você mencionou, todos os programadores do mundo não necessariamente escolherão os mesmos nomes para ações semelhantes ou equivalentes. Esse benefício vem dos programadores que concordam com nomes e parâmetros de interface comuns.
Derloopkat
8
  1. API explorável: pode parecer trivial, mas não subestima o poder de uma API explorável. A capacidade de navegar pelos dados facilita muito a criação de um modelo mental da API e de suas estruturas de dados para os desenvolvedores do cliente.

  2. Documentação embutida: o uso de URLs como relações de link pode direcionar os desenvolvedores do cliente para a documentação.

  3. Lógica simples do cliente: um cliente que simplesmente segue URLs, em vez de construí-los, deve ser mais fácil de implementar e manter.

  4. O servidor assume a propriedade das estruturas de URL: O uso da hipermídia remove o conhecimento codificado do cliente sobre as estruturas de URL usadas pelo servidor.

  5. Descarga de conteúdo para outros serviços: A Hipermídia é necessária ao descarregar conteúdo para outros servidores (uma CDN, por exemplo).

  6. Controle de versão com links: o Hypermedia ajuda a versão de APIs.

  7. Várias implementações do mesmo serviço: A hipermídia é uma necessidade quando existem várias implementações do mesmo serviço (e um cliente precisa acessar mais de uma).

Você pode encontrar uma explicação detalhada desses tópicos aqui: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html

Jørn Wildt
fonte
> Descarga de conteúdo para outros serviços: a Hipermídia é necessária ao descarregar conteúdo para outros servidores (uma CDN, por exemplo). Não, não é. Você pode apenas manter os mesmos links e usar a CDN.
Bruno Costa