OMI, le point clé est l'orientation action vs ressources. REST est axé sur les ressources et convient bien aux opérations CRUD et, étant donné sa sémantique connue, offre une certaine prévisibilité au premier utilisateur, mais lorsqu'il est implémenté à partir de méthodes ou de procédures, vous force à fournir une traduction artificielle au monde centré sur les ressources. D'un autre côté, RPC convient parfaitement aux API orientées action, où vous exposez des services, pas des ensembles de ressources CRUD.
Nul doute que REST est plus populaire, cela ajoute certainement quelques points si vous souhaitez exposer l'API à un tiers.
Sinon (par exemple en cas de création d'un frontal AJAX dans un SPA), mon choix est RPC. En particulier JSON-RPC, combiné avec JSON Schema comme langage de description, et transporté via HTTP ou Websockets selon le cas d'utilisation.
JSON-RPC est une spécification simple et élégante qui définit les charges utiles JSON de demande et de réponse à utiliser dans le RPC synchrone ou asynchrone.
Le schéma JSON est un projet de spécification définissant un format basé sur JSON visant à décrire les données JSON. En décrivant vos messages d'entrée et de sortie de service à l'aide du schéma JSON, vous pouvez avoir une complexité arbitraire dans la structure des messages sans compromettre la convivialité et l'intégration des services peut être automatisée.
Le choix du protocole de transport (HTTP vs websockets) dépend de différents facteurs, étant le plus important si vous avez besoin de fonctionnalités HTTP (mise en cache, revalidation, sécurité, idempotence, type de contenu, multi-parties, ...) ou si votre application a besoin d'échanger messages à haute fréquence.
Jusqu'à présent, c'est mon opinion personnelle sur la question, mais maintenant quelque chose qui peut être vraiment utile pour les développeurs Java qui lisent ces lignes, le cadre sur lequel j'ai travaillé au cours de l'année dernière, né de la même question que vous vous posez maintenant :
http://rpc.brutusin.org
Vous pouvez voir une démo en direct ici, montrant le navigateur de référentiel intégré pour les tests fonctionnels (merci JSON Schema) et une série d'exemples de services:
http://demo.rpc.brutusin.org
J'espère que ça aide le compagnon!
Nacho