Exemplos reais de HATEOAS (arquitetura REST) ​​[fechado]

140

como todo mundo deve ter notado, existem muitas APIs REST falsas / rudimentares em estado selvagem (que implementam uma API HTTP e a chamam de REST sem seguir o requisito de hipertexto como o mecanismo do motor do aplicativo, o que levou ao famoso discurso de Roy T. Fielding , o homem que primeiro especificou o paradigma REST).

Não consegui encontrar nenhum exemplo prático de uma implementação REST verdadeiramente orientada por hipertexto, juntamente com as definições de tipo de mídia específicas do aplicativo associadas para as transições de estado.

Existem exemplos publicamente acessíveis de tais implementações?

pmf
fonte
3
Acho isso interessante, pois muitas pessoas afirmam que o REST é "fácil", mas o próprio Fielding diz que, embora seja uma arquitetura simples, não é simples projetar um aplicativo com ele.
aehlke 21/07/2009
3
a propósito, deve ser o HATEOAS, não o HATEOS, o mais tardar no google.
David Roussel
2
O Paypal parece usá-lo: developer.paypal.com/docs/integration/direct/…
Andrew Thaddeus Martin
O próprio Roy Fielding já criou um aplicativo usando o HATEOAS?
systemovich

Respostas:

102

Não é uma implementação no sentido de executar código, mas eu realmente gosto do artigo " Como obter uma xícara de café " no InfoQ. Ele descreve o processo de pedir um café na Starbucks como um protocolo RESTful. Isso vai além do artigo introdutório REST típico "tudo é um recurso" e se concentra no HATEOAS. Altamente recomendado.

trendels
fonte
5
O livro "Rest in Practice" por Jim Webber, Sayas Parastatidis e Ian Robinson é bastante útil
DomreiRoam
2
O artigo é bom, mas infelizmente a API que ele descreve não segue rigorosamente o princípio HATEOAS porque não usa tipos de mídia personalizados. Como o cliente saberia como manipular (por exemplo, desserializar, analisar, exibir) cada recurso se tudo for application / xml? Isso dependeria de algumas maneiras não-padrão de passar essas informações, como documentação destinada a ser lida por humanos.
Ygormutti 14/10
21

E a API da Sun Cloud ? Desde a introdução:

A API não pressupõe nenhuma estrutura específica no espaço do URI. O ponto de partida é um URI, fornecido pelo provedor de serviços em nuvem, que identifica a própria nuvem. A representação da nuvem contém URIs para os outros recursos na nuvem e também para operações que podem ser executadas sobre eles (por exemplo, implantar e iniciar máquinas virtuais).

A história de fundo também pode ser útil.

Rich Apodaca
fonte
2
É a história de fundo que me levou a seguir o caminho do HATEAOS.
23411 CyberFonic
3
todos os links estão inoperantes
Roeland Van Heddegem 27/11
"Lamentamos que o site kenai.com tenha fechado."
Nick Rolando
@NickRolando, substituí o link.
Rich Apodaca
@RichApodaca, o link da história anterior está morto.
Vasantha Ganesh K
7

A Netflix possui uma API REST baseada no HATEOAS que inclui links como parte dos recursos.

Will Sargent
fonte
1
e agora o código de status é 404.
naXa
1
O link @Will Sargent está quebrado, por favor atualize.
Govi S
Desculpe, parece que a Netflix retirou-o e foi com outra coisa.
quer
2
As respostas somente para links tendem a ser menos relevantes quando esses links estão inoperantes.
Nyedidikeke
@nyedidikeke é um link, mas uma resposta para esse contexto, você só precisa corrigir o link editando a postagem!
Al-Mothafar
3

O RESTfulness da Sun Cloud API não é realmente abordado no quarto ponto de Roy:

Uma API REST não deve definir nomes ou hierarquias de recursos fixos (um acoplamento óbvio de cliente e servidor). Os servidores devem ter liberdade para controlar seu próprio espaço para nome. Em vez disso, permita que os servidores instruam os clientes sobre como criar URIs apropriados, como é feito em formulários HTML e modelos de URI, definindo essas instruções nos tipos de mídia e nas relações de vínculo. [Falha aqui implica que os clientes estão assumindo uma estrutura de recursos devido a informações fora da banda, como um padrão específico de domínio, que é o equivalente orientado a dados ao acoplamento funcional da RPC].

Exemplo 1 Nomes de recursos corrigidos em uma heirachy definida:

Da API da Sun Cloud: "... a representação de um VDC incluirá representações dos Clusters que o habitam, que por sua vez incluem representações das VMs em cada cluster".

Exemplo 2 informações fora da banda, como um padrão específico de domínio:

Você precisa ter o conteúdo da página wiki (informações fora da banda) para saber que o "mecanismo de comunicação de recursos" para o campo de recursos da nuvem "uri" é GET.

Ouriço
fonte
2
Você está correto, isso é muito enganador. No entanto, Roy está falando sobre nomes de recursos no espaço da interface do usuário, não no conteúdo do tipo de mídia. A Sun está livre para alterar a URI usada para acessar um cluster a qualquer momento. Obviamente, ele não pode alterar o termo "cluster" para "agrupar" dentro da representação sem criar uma nova versão do tipo de mídia, mas pode alterar o URI para qualquer coisa.
Darrel Miller
4
Sabemos que a API Sun usa HTTP como sua interface uniforme; portanto, o cliente não precisa consultar a página da wiki para saber que GET é um verbo válido para o recurso de nuvem. Ele pode apenas tentar, considerando que sabe que GET é um verbo seguro, ou pode usar OPTIONS para determinar se está disponível.
Darrel Miller
3

Percebi que isso foi perguntado há um tempo atrás, mas tentei demonstrar um fluxo "adequado" da API REST para um exemplo simples. Tentei seguir as regras de Roy para REST - talvez isso ajude: Exemplo de API usando REST

Jeremyh
fonte