OMI, el punto clave es la acción frente a la orientación de los recursos. REST está orientado a los recursos y se adapta bien a las operaciones CRUD y, dada su semántica conocida, proporciona cierta previsibilidad a un primer usuario, pero cuando se implementa a partir de métodos o procedimientos, lo obliga a proporcionar una traducción artificial al mundo centrado en los recursos. Por otro lado, RPC se adapta perfectamente a las API orientadas a la acción, donde expone servicios, no conjuntos de recursos compatibles con CRUD.
Sin duda, REST es más popular, esto definitivamente agrega algunos puntos si desea exponer la API a un tercero.
Si no (por ejemplo, en caso de crear un front-end AJAX en un SPA), mi elección es RPC. En particular, JSON-RPC, combinado con JSON Schema como lenguaje de descripción, y transportado a través de HTTP o Websockets según el caso de uso.
JSON-RPC es una especificación simple y elegante que define las cargas útiles JSON de solicitud y respuesta que se utilizarán en RPC síncrono o asíncrono.
El esquema JSON es un borrador de especificación que define un formato basado en JSON destinado a describir datos JSON. Al describir los mensajes de entrada y salida de su servicio utilizando el esquema JSON, puede tener una complejidad arbitraria en la estructura del mensaje sin comprometer la usabilidad, y la integración del servicio puede automatizarse.
La elección del protocolo de transporte (HTTP vs websockets) depende de diferentes factores, siendo el más importante si necesita características HTTP (almacenamiento en caché, revalidación, seguridad, idempotencia, tipo de contenido, multiparte, ...) o si su aplicación necesita intercambiarse mensajes a altas frecuencias.
Hasta ahora es mi opinión personal sobre el tema, pero ahora algo que puede ser realmente útil para aquellos desarrolladores de Java que leen estas líneas, el marco en el que he estado trabajando durante el año pasado, surgió de la misma pregunta que se están preguntando ahora. :
http://rpc.brutusin.org
Puede ver una demostración en vivo aquí, que muestra el navegador de repositorio incorporado para pruebas funcionales (gracias al esquema JSON) y una serie de servicios de ejemplo:
http://demo.rpc.brutusin.org
Espero que ayude compañero!
Nacho