Tolle Antworten - wollte nur einige der Kommentare klarstellen. JSON-RPC ist schnell und einfach zu konsumieren, aber wie bereits erwähnt, sind Ressourcen und Parameter eng miteinander verbunden und es besteht die Tendenz, dass Verben (api / deleteUser, api / addUser) mit GET / POST verwendet werden, wobei REST lose gekoppelte Ressourcen (api / Benutzer), die in einer HTTP-REST-API auf mehreren HTTP-Methoden (GET, POST, PUT, PATCH, DELETE) basieren. REST ist für unerfahrene Entwickler etwas schwieriger zu implementieren, aber der Stil ist mittlerweile weit verbreitet und bietet auf lange Sicht viel mehr Flexibilität (was Ihrer API eine längere Lebensdauer verleiht).
REST verfügt nicht nur über keine eng gekoppelten Ressourcen, sondern verhindert auch, dass Sie sich auf einen einzelnen Inhaltstyp festlegen. Dies bedeutet, dass Ihr Client die Daten in XML, JSON oder sogar YAML empfangen muss, sofern dies in Ihr System integriert ist Geben Sie alle Benutzer zurück, die die Header content-type / accept verwenden.
Auf diese Weise können Sie Ihre API flexibel genug halten, um neue Inhaltstypen ODER Clientanforderungen zu unterstützen.
Was REST jedoch wirklich von JSON-RPC unterscheidet, ist, dass es einer Reihe sorgfältig durchdachter Einschränkungen folgt, um die Flexibilität der Architektur zu gewährleisten. Zu diesen Einschränkungen gehört, dass sichergestellt wird, dass sich Client und Server unabhängig voneinander entwickeln können (Sie können Änderungen vornehmen, ohne die Anwendung Ihres Clients zu beschädigen), dass die Anrufe zustandslos sind (Status wird durch Hypermedia dargestellt), dass eine einheitliche Schnittstelle für Interaktionen bereitgestellt wird. Die API wird auf einem Schichtsystem entwickelt und die Antwort kann vom Client zwischengespeichert werden. Es gibt auch eine optionale Einschränkung für die Bereitstellung von Code bei Bedarf.
Nach alledem sind die meisten APIs (laut Fielding) nicht REST-fähig, da sie keine Hypermedien enthalten (eingebettete Hypertext-Links in der Antwort, die beim Navigieren in der API helfen). Die meisten APIs, die Sie dort finden, sind REST-ähnlich, da sie den meisten REST-Konzepten folgen, diese Einschränkung jedoch ignorieren. Immer mehr APIs implementieren dies jedoch und es wird immer mehr zu einer gängigen Praxis.
Dies gibt Ihnen auch eine gewisse Flexibilität, da hypermediengesteuerte APIs (wie z. B. Stormpath) den Client zu den URIs leiten (dh wenn sich etwas ändert, können Sie den URI in bestimmten Fällen ohne negative Auswirkungen ändern), wie dies bei RPC-URIs erforderlich ist statisch. Mit RPC müssen Sie diese verschiedenen URIs auch ausführlich dokumentieren und erklären, wie sie im Verhältnis zueinander funktionieren.
Im Allgemeinen würde ich sagen, dass REST der richtige Weg ist, wenn Sie eine erweiterbare, flexible API erstellen möchten, die eine lange Lebensdauer hat. Aus diesem Grund würde ich sagen, dass dies in 99% der Fälle der richtige Weg ist.
Viel Glück, Mike