Чудові відповіді - просто хотілося уточнити в деяких коментарях. JSON-RPC швидко та легко споживається, але, як згадуються ресурси та параметри, тісно пов'язані між собою і він, як правило, покладається на дієслова (api / deleteUser, api / addUser), використовуючи GET / POST, де REST надає вільно пов'язані ресурси (api / користувачів), що в HTTP REST API покладається на кілька методів HTTP (GET, POST, PUT, PATCH, DELETE). REST трохи складніше реалізовувати недосвідченим розробникам, але зараз стиль став досить поширеним, і він забезпечує набагато більшу гнучкість у довгостроковій перспективі (надаючи API більш тривалий термін експлуатації).
Поряд з тим, що не має щільно зв'язаних ресурсів, REST також дозволяє вам уникнути прихильності до одного типу контенту - це означає, якщо клієнту потрібно отримувати дані в XML, або JSON, або навіть YAML - якщо вбудований у вашу систему, ви могли б повернути будь-кого з тих, хто використовує заголовки типу вмісту / приймати.
Це дозволяє вам підтримувати API досить гнучким для підтримки нових типів вмісту АБО вимог клієнта.
Але те, що справді відокремлює REST від JSON-RPC, це те, що воно слідує за цілою низкою ретельно продуманих обмежень - забезпечення архітектурної гнучкості. Ці обмеження включають забезпечення можливості клієнта та сервера еволюціонувати незалежно один від одного (ви можете вносити зміни, не псуючи додаток свого клієнта), дзвінки без стану (стан представлено через гіпермедіа), надається рівномірний інтерфейс для взаємодії, API розробляється на шаруватій системі, і відповідь кеширується клієнтом. Існує також необов'язкове обмеження для надання коду на вимогу.
Однак, маючи все це сказане - API MOST не є RESTful (згідно Fielding), оскільки вони не містять гіпермедіа (вбудовані гіпертекстові посилання у відповідь, які допомагають орієнтуватися в API). Більшість API, які ви дізнаєтесь, є як REST, оскільки вони слідують більшості концепцій REST, але ігнорують це обмеження. Однак все більше і більше API реалізують це, і це стає все більш практичною практикою.
Це також дає певну гнучкість, оскільки API, керовані гіпермедіа (наприклад, Stormpath), спрямовують клієнта до URI (тобто, якщо щось зміниться, в деяких випадках ви можете змінити URI без негативного впливу), де - як і для URI RPC. статичний. За допомогою RPC вам також потрібно буде широко документувати ці різні URI і пояснити, як вони працюють один щодо одного.
Взагалі, я б сказав, що REST - це шлях, якщо ви хочете побудувати розширюваний, гнучкий API, який буде довготривалим. З цієї причини я б сказав, що це маршрут, який потрібно пройти 99% часу.
Удачі, Майку