Отличные ответы - просто хотел уточнить некоторые комментарии. 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 - если он встроен в вашу систему, вы можете верните любой из тех, кто использует заголовки content-type / accept.
Это позволяет вам поддерживать ваш API достаточно гибким для поддержки новых типов контента ИЛИ клиентских требований.
Но что действительно отличает REST от JSON-RPC, так это то, что он следует серии тщательно продуманных ограничений, обеспечивающих гибкость архитектуры. Эти ограничения включают в себя обеспечение того, чтобы клиент и сервер могли развиваться независимо друг от друга (вы можете вносить изменения, не портя приложение вашего клиента), вызовы не имеют состояния (состояние представлено через гипермедиа), для взаимодействий предусмотрен единый интерфейс, API разработан на многоуровневой системе, а ответ кэшируется клиентом. Существует также необязательное ограничение для предоставления кода по требованию.
Тем не менее, с учетом всего вышесказанного API-интерфейсы MOST не являются RESTful (согласно Филдингу), поскольку они не включают в себя гипермедиа (встроенные гипертекстовые ссылки в ответе, которые помогают перемещаться по API). Большинство API-интерфейсов, которые вы обнаружите, похожи на REST в том смысле, что они следуют большинству концепций REST, но игнорируют это ограничение. Однако все больше и больше API реализуют это, и это становится все более популярной практикой.
Это также дает вам некоторую гибкость, так как API, управляемые гипермедиа (например, Stormpath), направляют клиента к URI (то есть, если что-то меняется, в определенных случаях вы можете изменять URI без негативного влияния), где, как и в случае RPC, URI должны быть статичный. При использовании RPC вам также необходимо подробно документировать эти различные URI и объяснять, как они работают по отношению друг к другу.
В целом, я бы сказал, что REST - это путь, если вы хотите создать расширяемый, гибкий API, который будет долговечным. По этой причине, я бы сказал, что это путь 99% времени.
Удачи майк