Ainsi, un service RESTful a un ensemble fixe de verbes dans son vocabulaire. Un service Web RESTful les prend des méthodes HTTP. Il y a certains avantages supposés à définir un vocabulaire fixe, mais je ne comprends pas vraiment le point. Peut-être que quelqu'un peut l'expliquer.
Pourquoi un vocabulaire fixe tel que décrit par REST est-il meilleur que de définir dynamiquement un vocabulaire pour chaque état? Par exemple, la programmation orientée objet est un paradigme populaire. RPC est décrit pour définir des interfaces fixes, mais je ne sais pas pourquoi les gens supposent que RPC est limité par ces contraintes. Nous pourrions spécifier dynamiquement l'interface tout comme un service RESTful décrit dynamiquement sa structure de contenu.
REST est censé être avantageux en ce sens qu'il peut se développer sans étendre le vocabulaire. Les services RESTful se développent dynamiquement en ajoutant plus de ressources. Qu'y a-t-il de si mal à étendre un service en spécifiant dynamiquement un vocabulaire par objet? Pourquoi ne pas simplement utiliser les méthodes définies sur nos objets comme vocabulaire et demander à nos services de décrire au client quelles sont ces méthodes et si elles ont ou non des effets secondaires?
Essentiellement, j'ai l'impression que la description d'une structure de ressources côté serveur équivaut à la définition d'un vocabulaire, mais nous sommes alors obligés d'utiliser le vocabulaire limité dans lequel interagir avec ces ressources.
Un vocabulaire fixe dissocie-t-il vraiment les préoccupations du client des préoccupations du serveur? Je dois sûrement m'inquiéter de la configuration du serveur, c'est normalement l'emplacement des ressources dans les services RESTful. Se plaindre de l'utilisation d'un vocabulaire dynamique semble injuste car il nous faut de toute façon raisonner de manière dynamique pour comprendre cette configuration. Un service RESTful décrit les transitions que vous pouvez effectuer en identifiant la structure d'objet via hypermédia.
Je ne comprends tout simplement pas ce qui rend un vocabulaire fixe meilleur que tout vocabulaire dynamique auto-descriptif, qui pourrait facilement très bien fonctionner dans un service de type RPC. Est-ce juste un mauvais raisonnement pour limiter le vocabulaire du protocole HTTP?
Réflexion
Juste pour clarifier mes pensées un peu mieux que moi. Supposons que vous conceviez une API à usage général, peut-être même pas orientée Web. Seriez-vous heureux si quelqu'un dit que vous ne pouvez utiliser ces noms de méthode que sur vos objets? REST n'est pas limité à HTTP, mais considérez la situation où chaque API que vous écrivez, orientée Web ou autrement constituée simplement d'objets contenant les méthodes GET POST PUT et DELETE. Donc, la méthode object.foo que vous vouliez définir n'est pas possible. Vous devez définir un nouvel objet appelé foo et appeler sa méthode GET. C'est essentiellement ainsi que fonctionne REST, et cela me met un peu mal à l'aise d'y penser. Vous n'avez pas une meilleure compréhension générique de ce que fait foo, vous avez juste été obligé de créer un nouvel objet pour ce qui est essentiellement une méthode sur un objet parent. De plus votre API n'est pas moins complexe, vous venez de masquer la complexité de l'interface en créant plus d'objets. Les services Web RESTful nous obligent à adopter une interface qui peut être suffisante ou non dans le contexte de l'API que nous exposons. Il y a peut-être une bonne raison de le faire avec des API Web, mais une bonne raison de ne pas adopter des interfaces standard pour chaque objet dans chaque API à usage général. Un exemple pratique serait apprécié.