IMO, il punto chiave è l'azione rispetto all'orientamento delle risorse. REST è orientato alle risorse e si adatta bene alle operazioni CRUD e, data la sua semantica nota, fornisce una certa prevedibilità a un primo utente, ma quando implementato da metodi o procedure ti costringe a fornire una traduzione artificiale al mondo incentrato sulle risorse. D'altra parte RPC si adatta perfettamente alle API orientate all'azione, in cui si espongono servizi, non insiemi di risorse compatibili con CRUD.
Senza dubbio REST è più popolare, questo sicuramente aggiunge alcuni punti se si desidera esporre l'API a terzi.
In caso contrario (ad esempio in caso di creazione di un front-end AJAX in una SPA), la mia scelta è RPC. In particolare JSON-RPC, combinato con JSON Schema come linguaggio di descrizione, e trasportato su HTTP o Websocket a seconda del caso d'uso.
JSON-RPC è una specifica semplice ed elegante che definisce i payload JSON di richiesta e risposta da utilizzare in RPC sincrono o asincrono.
JSON Schema è una bozza di specifica che definisce un formato basato su JSON volto a descrivere i dati JSON. Descrivendo i messaggi di input e output del servizio utilizzando JSON Schema è possibile avere una complessità arbitraria nella struttura dei messaggi senza compromettere l'usabilità e l'integrazione del servizio può essere automatizzata.
La scelta del protocollo di trasporto (HTTP vs websocket) dipende da diversi fattori, essendo il più importante se sono necessarie funzionalità HTTP (memorizzazione nella cache, riconvalida, sicurezza, idempotenza, tipo di contenuto, multipart, ...) o se l'applicazione deve scambiare messaggi ad alto rendimento.
Fino ad ora è la mia opinione personale sulla questione, ma ora qualcosa che può essere davvero utile per quegli sviluppatori Java che leggono queste righe, il framework su cui ho lavorato durante l'ultimo anno, nato dalla stessa domanda che ti stai ponendo ora :
http://rpc.brutusin.org
Puoi vedere una demo live qui, che mostra il browser del repository integrato per i test funzionali (grazie allo schema JSON) e una serie di servizi di esempio:
http://demo.rpc.brutusin.org
Spero che aiuti l'accoppiamento!
Nacho