OMI, o ponto principal é a ação versus orientação de recursos. O REST é orientado a recursos e se encaixa bem nas operações CRUD e, dada a semântica conhecida, fornece alguma previsibilidade para o primeiro usuário, mas quando implementado a partir de métodos ou procedimentos o força a fornecer uma tradução artificial para o mundo centralizado em recursos. Por outro lado, o RPC se adapta perfeitamente às APIs orientadas à ação, nas quais você expõe serviços, não conjuntos de recursos compatíveis com CRUD.
Sem dúvida, o REST é mais popular, isso definitivamente adiciona alguns pontos se você deseja expor a API a terceiros.
Caso contrário (por exemplo, no caso de criar um front-end AJAX em um SPA), minha escolha é RPC. Em particular, JSON-RPC, combinado com o JSON Schema como linguagem de descrição e transportado por HTTP ou Websockets, dependendo do caso de uso.
JSON-RPC é uma especificação simples e elegante que define cargas úteis JSON de solicitação e resposta a serem usadas em RPC síncrono ou assíncrono.
O esquema JSON é uma especificação preliminar que define um formato baseado em JSON destinado a descrever dados JSON. Ao descrever suas mensagens de entrada e saída de serviço usando o JSON Schema, você pode ter uma complexidade arbitrária na estrutura da mensagem sem comprometer a usabilidade, e a integração de serviços pode ser automatizada.
A escolha do protocolo de transporte (HTTP x Websockets) depende de diferentes fatores, sendo o mais importante se você precisa de recursos HTTP (cache, revalidação, segurança, idempotência, tipo de conteúdo, multipartes, ...) ou se o aplicativo precisa trocar mensagens com altas frequências.
Até agora, é muito minha opinião pessoal sobre o assunto, mas agora algo que pode ser realmente útil para os desenvolvedores de Java que leem essas linhas, a estrutura em que venho trabalhando durante o ano passado, nascida da mesma pergunta que você está se perguntando agora :
http://rpc.brutusin.org
Você pode ver uma demonstração ao vivo aqui, mostrando o navegador do repositório interno para testes funcionais (graças ao JSON Schema) e uma série de serviços de exemplo:
http://demo.rpc.brutusin.org
Espero que ajude companheiro!
Nacho