Quel est l'avantage de l'hypermédia (HATEOAS)?

17

Je ne comprends pas les avantages d'HATEOAS pour les API destinées à être utilisées par des programmes (par opposition aux humains qui parcourent directement votre API). Bien sûr, le client n'est pas lié à un schéma d'URL, mais il est lié à un schéma de données, ce qui est la même chose dans mon esprit.

Par exemple, supposons que je souhaite afficher un article sur une commande, supposons que j'ai déjà découvert ou connu l'URL de la commande.

HATEOAS:

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

non HATEOAS:

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

Dans le premier modèle, je dois savoir que l'objet de commande a un champ itemURL. Dans le deuxième modèle, je dois savoir comment construire une URL d'élément. Dans les deux cas, je dois "savoir" quelque chose à l'avance, alors que fait HATEOAS pour moi?

Rythme
la source
1
get(orderURL);devrait vous le dire the fact that the order object has an itemURL field.
yannis
Lorsque vous écrivez l'application cliente, vous devez savoir à l'avance quel est le champ.
Pace
8
Comment une application est-elle censée obtenir l'article d'une commande si l'application ne sait même pas qu'une commande a un article? La découverte fonctionne pour la navigation manuelle mais pas pour les applications automatisées.
Pace
L'homme lui-même en parle ici: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Réponses:

6

Une différence est que le schéma est, espérons-le, une norme, ou du moins peut être réutilisé par d'autres.

Par exemple, supposons que vous utilisez l'API Twitter et que vous souhaitez également prendre en charge StatusNet (ou à la place). Puisqu'ils utilisent le même modèle de données que Twitter, si l'API suit HATEOAS, il vous suffit maintenant de changer l'URL principale. Si ce n'est pas le cas, vous devez maintenant modifier chaque URL unique à partir du code.

Bien sûr, si vous devez de toute façon modifier le code pour mettre l'URL du point d'entrée du service, cela peut ne pas sembler si utile. Cela brille vraiment si cette URL est insérée dynamiquement; par exemple, si vous construisiez un service comme Twillio, qui interagirait avec la propre API de l'utilisateur.

André Paramés
la source
C'est un point intéressant auquel je n'avais pas pensé.
Pace
@YannisRizos: Hmm, je ne vois pas où j'ai dit que HATEOAS est une norme. J'ai dit que le " schéma (de données) est, espérons-le, une norme". Dans la terminologie REST, ce serait le type de média.
André Paramés
En deuxième lecture, vous avez absolument raison.
yannis
2
Oui, si vous supposez que les noms de rel pour les liens sont les mêmes. Mais en parlant en général, et pas seulement sur l'exemple spécifique que vous mentionnez, chaque programmeur dans le monde ne choisira pas nécessairement les mêmes noms pour des actions similaires ou équivalentes. Cet avantage vient du fait que les programmeurs ont convenu d'un nom et de paramètres d'interface communs.
derloopkat
8
  1. API explorable: Cela peut sembler trivial mais ne sous-estimez pas la puissance d'une API explorable. La possibilité de parcourir les données permet aux développeurs clients de créer beaucoup plus facilement un modèle mental de l'API et de ses structures de données.

  2. Documentation en ligne: L'utilisation d'URL en tant que relations de lien peut diriger les développeurs clients vers la documentation.

  3. Logique client simple: Un client qui suit simplement les URL au lieu de les construire lui-même, devrait être plus facile à implémenter et à maintenir.

  4. Le serveur s'approprie les structures URL: l'utilisation d'hypermédia supprime la connaissance codée en dur du client des structures URL utilisées par le serveur.

  5. Déchargement de contenu vers d'autres services: Hypermedia est nécessaire lors du déchargement de contenu vers d'autres serveurs (un CDN par exemple).

  6. Gestion des versions avec des liens: Hypermedia aide à la gestion des versions des API.

  7. Implémentations multiples du même service: Hypermedia est une nécessité lorsqu'il existe plusieurs implémentations du même service (et qu'un client doit accéder à plusieurs d'entre elles).

Vous pouvez trouver une explication détaillée de ces puces ici: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html

Jørn Wildt
la source
> Déchargement de contenu vers d'autres services: Hypermedia est nécessaire lors du déchargement de contenu vers d'autres serveurs (un CDN par exemple). Non ce n'est pas. Vous pouvez simplement conserver les mêmes liens et utiliser CDN.
Bruno Costa