Exemples réels pour HATEOAS (architecture REST) ​​[fermé]


140

comme tout le monde l'a peut-être remarqué, il existe de nombreuses API REST fausses / rudimentaires dans la nature (qui implémentent une API HTTP et l'appellent REST sans suivre l'exigence de l'état de l'hypertexte en tant que moteur d'application, qui a conduit à la célèbre diatribe de Roy T. Fielding , l'homme qui a le premier spécifié le paradigme REST).

Je n'ai pas pu trouver d'exemples pratiques d'implémentation REST véritablement hypertexte avec les définitions de type de média spécifiques à l'application associées pour les transitions d'état.

Existe-t-il des exemples accessibles au public de telles implémentations?


3
Je trouve cela intéressant car beaucoup de gens prétendent que REST est "facile" mais Fielding lui-même dit que bien qu'il s'agisse d'une architecture simple, il n'est pas simple de concevoir une application avec.
aehlke

3
en passant, ça devrait être HATEOAS pas HATEOS, ce dernier ne va pas bien sur Google.
David Roussel



Roy Fielding lui-même a-t-il déjà construit une application avec HATEOAS?
systemovich

Réponses:


102

Ce n'est pas une implémentation dans le sens de l'exécution de code, mais j'aime beaucoup l'article " Comment obtenir une tasse de café " sur InfoQ. Il décrit le processus de commande d'un café chez Starbucks comme un protocole RESTful. Cela va au-delà de l'article d'introduction REST typique «tout est une ressource» et se concentre sur HATEOAS. Hautement recommandé.


5
Le livre "Rest in Practice" de Jim Webber, Sayas Parastatidis et Ian Robinson est assez utile
DomreiRoam

2
L'article est bien, mais malheureusement, l'API qu'il décrit n'adhère pas strictement au principe HATEOAS car elle n'utilise pas de types de médias personnalisés. Comment le client saurait-il manipuler (par exemple désérialiser, analyser, afficher) chaque ressource si tout est application / xml? Cela dépendrait de certaines façons non standard de transmettre ces informations, comme la documentation destinée à être lue par des humains.
ygormutti

21

Qu'en est-il de l' API Sun Cloud ? De l'introduction:

L'API ne suppose aucune structure particulière dans l'espace URI. Le point de départ est un URI, fourni par le fournisseur de services cloud, qui identifie le cloud lui-même. La représentation du cloud contient des URI pour les autres ressources du cloud, ainsi que pour les opérations qui peuvent être effectuées sur celles-ci (par exemple le déploiement et le démarrage de machines virtuelles).

le histoire pourrait également être utile.


2
C'est la trame de fond qui m'a permis de s'engager sur la voie HATEAOS.
CyberFonic

3
tous les liens sont morts
Roeland Van Heddegem

"Nous sommes désolés que le site kenai.com soit fermé."
Nick Rolando

@NickRolando, j'ai remplacé le lien.
Rich Apodaca

@RichApodaca, le lien de l'histoire est mort.
Vasantha Ganesh K

7

Netflix dispose d'une API REST basée sur HATEOAS qui inclut des liens dans le cadre des ressources.


1
et maintenant le code d'état est 404.
naXa

1
Le lien @Will Sargent est rompu, veuillez mettre à jour.
Govi S

Désolé, il semble que Netflix l'a supprimé et a opté pour autre chose.
Will Sargent

2
Les réponses aux liens uniquement ont tendance à être moins pertinentes lorsque ces liens sont morts.
nyedidikeke

@nyedidikeke c'est un lien mais une réponse pour ce contexte, il vous suffit de corriger le lien en éditant le post!
Al-Mothafar

3

Le RESTfulness de l'API Sun Cloud n'est-il pas réellement abordé dans le 4e point de Roy:

Une API REST ne doit pas définir de noms ou de hiérarchies de ressources fixes (un couplage évident entre client et serveur). Les serveurs doivent avoir la liberté de contrôler leur propre espace de noms. Au lieu de cela, autorisez les serveurs à indiquer aux clients comment construire des URI appropriés, comme cela se fait dans les formulaires HTML et les modèles d'URI, en définissant ces instructions dans les types de médias et les relations de lien. [L'échec ici implique que les clients supposent une structure de ressources en raison d'informations hors bande, comme une norme spécifique au domaine, qui est l'équivalent orienté données du couplage fonctionnel de RPC].

Exemple 1 Noms de ressources fixes dans une héritière définie:

Extrait de l'API Sun Cloud: "... la représentation d'un VDC comprendra des représentations des clusters qui l'habitent, qui à leur tour incluent des représentations des VM au sein de chaque cluster."

Exemple 2 hors bande, telles qu'une norme spécifique au domaine:

Vous devez avoir le contenu de la page wiki (informations hors bande) pour savoir que le "mécanisme de communication des ressources" pour le champ de ressources Cloud "uri" est GET.


2
Vous avez raison, c'est très trompeur. Cependant, Roy parle de noms de ressources dans l'espace uri, pas dans le contenu du type de média. Sun est libre de changer l'URI utilisé pour accéder à un cluster à tout moment. De toute évidence, il ne peut pas changer le terme «cluster» en «groupe» dans la représentation sans créer une nouvelle version du type de média, mais il peut changer l'URI en n'importe quoi.
Darrel Miller

4
Nous savons que l'API Sun utilise HTTP comme interface uniforme, de sorte que le client n'a pas besoin de consulter la page wiki pour savoir que GET est un verbe valide pour la ressource cloud. Il peut simplement l'essayer sachant qu'il sait que GET est un verbe sûr, ou il peut utiliser OPTIONS pour déterminer s'il est disponible.
Darrel Miller

3

J'ai réalisé que cela avait été demandé il y a quelque temps, mais j'ai tenté de démontrer un flux d'API REST "approprié" pour un exemple simple. J'ai essayé de suivre les règles de Roy pour REST - peut-être que cela pourrait aider: Exemple d'API utilisant REST

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.