Après avoir regardé cette conférence sur REST, Reuse and Serendipity par Steve Vinoski, je me demande s'il y a des analyses de rentabilisation dans greenfield projets pour (XML-) Configurations RPC-ish, que REST ne pouvait pas résoudre mieux.
Quelques problèmes RPC qu'il mentionne:
Juste pour le dramatiser un peu, certains résultats instantanés de Google pour RPC vs REST:
En général, RPC offre beaucoup plus d'intégration linguistique que REST. Comme vous l'avez mentionné, cela pose un certain nombre de problèmes en termes d'échelle, de gestion des erreurs, de sécurité des types, etc., en particulier lorsqu'un système distribué unique implique plusieurs hôtes exécutant du code écrit dans plusieurs langues. Cependant, après avoir écrit des systèmes d'entreprise qui utilisent RPC, REST et même les deux simultanément, j'ai trouvé qu'il y avait de bonnes raisons de choisir RPC plutôt que REST dans certains cas.
Voici les cas où j'ai trouvé que RPC était mieux adapté:
En ce qui concerne l'IDL, dans un système REST, vous devez également écrire du code qui convertit les données dans les demandes et réponses REST) en fonction de la représentation des données internes que vous Les sources IDL (avec de bons commentaires) peuvent également servir de documentation de l'interface, qui doit être écrite et maintenue séparément pour une API REST.
Les trois éléments ci-dessus se produisent souvent lorsque vous cherchez à construire un composant d'un plus grand système. D'après mon expérience, ces composants sont souvent ceux où leurs sous-systèmes doivent pouvoir échouer indépendamment et ne pas provoquer la défaillance totale des autres sous-systèmes ou du composant entier. De nombreux systèmes sont écrits en Erlang pour atteindre ces objectifs également, et dans certains cas, Erlang peut être un meilleur choix que d'écrire un système dans une autre langue et d'utiliser RPC juste pour obtenir ces avantages.
Comme la plupart des problèmes d'ingénierie, il n'y a pas de solution unique au problème de la communication interprocessus. Vous devez examiner le système que vous concevez et faire le meilleur choix pour votre cas d'utilisation.
Vous pouvez réellement avoir les deux. Des plugins comme RestRPC pour Grails fournissent des annotations qui intercepteront les appels à vos méthodes et les géreront de manière reposante tout en vous permettant d'en avoir autant que vous le souhaitez (ce qui serait très semblable à RPC).
Il existe certains avantages majeurs de REST lorsque les produits sont mis à l'échelle dans un centre de données et que vous effectuez une haute disponibilité et un équilibrage de charge.
Cependant, pensez à un projet à plus petite échelle. Besoin d'un webservice qui aura quelques centaines de requêtes par heure? La WCF s'occupe de toutes les questions de transport. A une interface pratique pour envoyer des objets à travers le réseau, et permet à la connexion réseau d'être configurée, chiffrée et certifiée sans programmation en utilisant uniquement le fichier application.config.