Personne dans la communauté REST ne dit que REST est facile. HATEOAS n'est qu'un des aspects qui ajoute de la difficulté à une architecture REST.
Les gens ne font pas HATEOAS pour toutes les raisons que vous suggérez: c'est difficile. Cela ajoute de la complexité à la fois côté serveur et client (si vous voulez réellement en profiter).
CEPENDANT, des milliards de personnes bénéficient aujourd'hui des avantages de REST. Savez-vous quelle est l'URL de "paiement" sur Amazon? Je ne. Pourtant, je peux commander tous les jours. Cette URL a-t-elle changé? Je ne sais pas, je m'en fiche.
Savez-vous que ça s'en soucie? Quiconque a écrit un écran a gratté le client automatisé Amazon. Quelqu'un qui a probablement reniflé minutieusement le trafic Web, lu des pages HTML, etc. pour trouver quels liens appeler, quand et avec quelles charges utiles.
Et dès qu'Amazon a modifié ses processus internes et sa structure d'URL, ces clients codés en dur ont échoué - car les liens se sont rompus.
Pourtant, les internautes occasionnels ont pu faire leurs achats toute la journée avec à peine un accroc.
C'est REST en action, il est simplement augmenté par l'être humain qui est capable d'interpréter et d'intuitionner l'interface basée sur du texte, de reconnaître un petit graphique avec un panier et de comprendre ce que cela signifie réellement.
La plupart des gens qui écrivent des logiciels ne le font pas. La plupart des gens qui écrivent des clients automatisés s'en moquent. La plupart des gens trouvent plus facile de réparer leurs clients lorsqu'ils se cassent que de concevoir l'application pour ne pas casser en premier lieu. La plupart des gens n'ont tout simplement pas assez de clients là où cela compte.
Si vous écrivez une API interne pour communiquer entre deux systèmes avec un support technique expert et un service informatique des deux côtés du trafic, qui sont capables de communiquer les changements rapidement, de manière fiable et avec un calendrier de changement, alors REST ne vous achète rien. Vous n'en avez pas besoin, votre application n'est pas assez grande et elle n'est pas assez longue pour avoir de l'importance.
Les grands sites avec de grandes bases d'utilisateurs ont ce problème. Ils ne peuvent pas simplement demander aux gens de changer leur code client sur un coup de tête lorsqu'ils interagissent avec leurs systèmes. Le calendrier de développement des serveurs n'est pas le même que le calendrier de développement du client. Les modifications brusques de l'API sont tout simplement inacceptables pour toutes les personnes impliquées, car elles perturbent le trafic et les opérations des deux côtés.
Ainsi, une opération comme celle-ci bénéficierait très probablement de HATEOAS, car il est plus facile à version, plus facile à migrer pour les clients plus âgés, plus facile à rétrocompatible que non.
Un client qui délègue une grande partie de son flux de travail au serveur et agit sur les résultats est beaucoup plus robuste aux changements de serveur qu'un client qui ne le fait pas.
Mais la plupart des gens n'ont pas besoin de cette flexibilité. Ils écrivent du code serveur pour 2 ou 3 départements, c'est un usage interne. Si ça casse, ils le réparent et ils en tiennent compte dans leurs opérations normales.
La flexibilité, qu'elle provienne de REST ou de toute autre chose, engendre la complexité. Si vous voulez que ce soit simple et rapide, alors vous ne le rendez pas flexible, vous «faites-le simplement», et c'est fait. Au fur et à mesure que vous ajoutez des abstractions et des déréférencements aux systèmes, les choses deviennent plus difficiles, plus de plaques chauffantes, plus de code à tester.
Une grande partie de REST échoue à la puce «vous n'en aurez pas besoin». Jusqu'à ce que, bien sûr, vous le fassiez.
Si vous en avez besoin, utilisez-le et utilisez-le tel qu'il est présenté. REST ne fait pas des allers-retours sur HTTP. Cela ne l'a jamais été, c'est un niveau beaucoup plus élevé que cela.
Mais lorsque vous avez besoin de REST et que vous utilisez REST, alors HATEOAS est une nécessité. Cela fait partie du package, et une clé de ce qui le fait fonctionner.