IMO, titik kuncinya adalah aksi vs orientasi sumber daya. REST berorientasi pada sumber daya dan sangat cocok untuk operasi CRUD dan mengingat semantiknya yang diketahui memberikan kemungkinan yang dapat diprediksi kepada pengguna pertama, tetapi ketika diimplementasikan dari metode atau prosedur memaksa Anda untuk menyediakan terjemahan buatan ke dunia yang berpusat pada sumber daya. Di sisi lain RPC sangat cocok untuk API berorientasi tindakan, tempat Anda mengekspos layanan, bukan rangkaian sumber daya yang dapat membantu CRUD.
Tidak diragukan lagi REST lebih populer, ini pasti menambah beberapa poin jika Anda ingin mengekspos API ke pihak ketiga.
Jika tidak (misalnya dalam hal membuat front-end AJAX di SPA), pilihan saya adalah RPC. Dalam JSON-RPC tertentu, dikombinasikan dengan Skema JSON sebagai bahasa deskripsi, dan diangkut melalui HTTP atau Websockets tergantung pada kasus penggunaan.
JSON-RPC adalah spesifikasi sederhana dan elegan yang mendefinisikan permintaan dan respons muatan JSON untuk digunakan dalam RPC sinkron atau asinkron.
Skema JSON adalah spesifikasi rancangan yang mendefinisikan format berbasis JSON yang bertujuan untuk menggambarkan data JSON. Dengan menjelaskan pesan input dan output layanan Anda menggunakan Skema JSON Anda dapat memiliki kompleksitas sewenang-wenang dalam struktur pesan tanpa mengurangi kegunaan, dan integrasi layanan dapat diotomatisasi.
Pilihan protokol transport (HTTP vs websockets) tergantung pada faktor yang berbeda, menjadi yang paling penting apakah Anda memerlukan fitur HTTP (caching, validasi ulang, keamanan, idempotensi, tipe konten, multipart, ...) atau apakah aplikasi Anda perlu bertukar pesan pada frekuensi tinggi.
Sampai sekarang ini sangat banyak pendapat pribadi saya tentang masalah ini, tetapi sekarang sesuatu yang bisa sangat membantu bagi para pengembang Java yang membaca baris-baris ini, kerangka kerja yang telah saya kerjakan selama tahun lalu, lahir dari pertanyaan yang sama yang Anda tanyakan sekarang :
http://rpc.brutusin.org
Anda dapat melihat demo langsung di sini, menampilkan browser repositori bawaan untuk pengujian fungsional (terima kasih JSON Schema) dan serangkaian layanan contoh:
http://demo.rpc.brutusin.org
Semoga ini bisa membantu sobat!
Nacho