REST vs RPC für die mobile Entwicklung

8

Wie viele wissen, steigt die mobile Entwicklung heutzutage rasant an und ich glaube, sie wirkt sich auf das aus, was wir codieren. Um genau zu sein, bin ich daran interessiert, Webdienste für eine mobile Anwendung zu entwickeln.

Ich sehe zwei mögliche Architekturen - RPC und REST. Ich habe sowohl REST- als auch RPC-Dienste entwickelt und festgestellt, dass RPC-Dienste viel einfacher zu codieren sind, insbesondere in Sprachen wie PHP. Das Problem dabei scheint die Skalierbarkeit zu sein - die Serverseite kann leicht zu einem Chaos werden, wenn viele Prozeduren vorhanden sind.

REST hingegen scheint viel strukturierter zu sein, die Serverseite ist relativ einfach zu warten, kann jedoch Daten in mehrere Ressourcen aufteilen, was für mobile Anwendungen (aus mehreren Gründen) schlecht ist.

Nach meinen Erfahrungen scheint RPC in den meisten Fällen etwas besser zu sein:

  • Sowohl die Client- als auch die Serverseite sind bemüht, die Anzahl der verfügbaren Prozeduren und getätigten Anrufe zu minimieren.
  • Das Befolgen von Architekturregeln wirkt nicht mit ansonsten möglichen Optimierungen entgegen.

Ich erwarte nicht wirklich, dass mir jemand erklärt, was REST und RPC sind, das Web ist voll davon. Ich möchte, dass Leute, die Erfahrung mit der Entwicklung mobiler Apps haben, ihre Meinung zur Verwendung dieser beiden Architekturen auf der Serverseite äußern. Trinkgelder sind ebenfalls willkommen (wer liebt Trinkgelder nicht?).

Pijusn
quelle

Antworten:

6

Es gibt kaum einen Unterschied, RPC ist in der Regel mehr Binärprotokolle als REST, aber das muss nicht der Fall sein. Auch RPC wird in der Regel als einzelner Prozedurpunkt pro Aufruf implementiert, aber das muss auch nicht sein - Sie können eine einzelne RPC-Prozedur implementieren, die ein Verb im REST-Stil als erstes Argument verwendet. RPC hat manchmal einen halb- / zustandsbehafteten Ansatz, aber auch dies muss nicht der Fall sein, wenn Sie bei jedem Aufruf ein "Cookie" übergeben.

Heutzutage kommt es auf die Entwicklungsunterstützung an, und es gibt mehr REST-APIs für webbasierte Sprachen, sodass die Benutzer REST verwenden. Wenn Sie die Entwicklung benutzerorientierter betrachten, ist es wahrscheinlich besser, stattdessen einen RPC-Mechanismus zu verwenden, der die Flexibilität nutzt, ein komprimierteres Binärprotokoll bereitzustellen, und es dann nach Ihren Wünschen zu implementieren - eine einzelne Prozedur Das leitet zu einer Routine weiter, die auf einer ID oder einem Verb basiert, und ist durch Übergeben einer ID vollständig zustandslos. All dies kann so implementiert werden, dass es sehr REST-artig aussieht, jedoch mit deutlich geringerem Overhead.

Es gibt mehrere RPC-Systeme, versuchen Sie Protokollpuffer oder Sparsamkeit für Ihre mobile App.

gbjbaanb
quelle
Protokollpuffer sind sparsam, scheinen etwas wirklich Interessantes zu sein, um tiefer zu schauen, danke :)
Pijusn
5

Vielleicht möchten Sie einen Blick auf diesen Artikel von Netflix über das API-Redesign werfen: http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html

TL; DR:

  • REST verursacht im Allgemeinen gesprächige APIs: Wenn eine Operation mehrere Ressourcen bearbeiten muss, benötigen Sie mehrere Aufrufe (dh langsam!).
  • Eine API ist verschiedenen Konsumenten nicht gut zugeordnet, weshalb Netflix einen Teil des Client-Codes auf den Server überträgt: Jeder Konsument kann seine eigene Adapter- / Orchestrierungsschicht auf dem Server bereitstellen, um den API-Zugriff auf die verschiedenen Konsumenten zu optimieren.

Persönliche Anmerkung:

  • Bitte verknüpfen Sie RPC nicht mit den aufgeblähten SOAP / CORBA / RMI-Unternehmensprotokollen im alten Stil. Zum Beispiel ist JSON-RPC ein sehr einfaches, elegantes und flinkes Protokoll für RPC, das Sie auf jeden Fall berücksichtigen sollten.
  • REST ist perfekt für CRUD-APIs. Wenn Ihre API jedoch sehr handlungsorientiert ist, kann es schwierig sein, dies REST-Verben / Endpunkten zuzuordnen.
Dieter Van de Walle
quelle
1
Bitte assoziieren Sie REST nicht mit SOAP / CORBA / RMI im alten Stil. Meinten Sie rpc statt REST?
Esben Skov Pedersen
@EsbenSkovPedersen Ich denke auch, dass er dort RPC meint.
Philipp Claßen
Ja Entschuldigung! Ich habe meine Antwort aktualisiert!
Dieter Van de Walle