HTTP ist ein Kommunikationsprotokoll, das in der Regel für die Kommunikation mit Internet-Ressourcen oder einer Anwendung mit einem Webbrowser-Client verwendet wird.
REST bedeutet, dass das Hauptkonzept, das Sie bei der Entwicklung der Anwendung verwenden, die Ressource ist: für jede Aktion, die Sie durchführen möchten, müssen Sie eine Ressource definieren, auf der Sie oft nur eine CRUD-Operation durchführen, was eine einfache Aufgabe ist. Zu diesem Zweck ist es sehr praktisch, vier Verben zu verwenden, die im HTTP-Protokoll für die vier CRUD-Operationen verwendet werden (GET für Read, POST für CREATE, PUT für UPDATE und DELETE für DELETE).
Das ist anders als das ältere Konzept von RPC (Remote Procedure Call), bei dem Sie eine Reihe von Aktionen haben, die Sie als Ergebnis des Benutzeraufrufs ausführen wollen. Wenn Sie zum Beispiel daran denken, wie man ein Facebook-Like auf einen Beitrag beschreibt, könnten Sie mit RPC Dienste namens AddLikeToPost
y RemoveLikeFromPost
und verwalten Sie es zusammen mit all Ihren anderen Diensten, die sich auf FB-Posts beziehen, so dass Sie kein spezielles Objekt für Like erstellen müssen.
Mit REST haben Sie ein Like-Objekt, das separat mit den Funktionen Löschen und Erstellen verwaltet wird. Es bedeutet auch, dass es eine separate Entität in Ihrer DB beschreibt. Das mag wie ein kleiner Unterschied aussehen, aber wenn man so arbeitet, erhält man normalerweise einen viel einfacheren Code und eine viel einfachere Anwendung. Bei diesem Design ist der größte Teil der Anwendungslogik aus der Struktur des Objekts (Modells) ersichtlich, im Gegensatz zu RPC, bei dem man normalerweise viel mehr Logik explizit hinzufügen muss.
Der Entwurf einer RESTful-Anwendung ist oft sehr viel schwieriger, weil man komplizierte Dinge auf einfache Weise beschreiben muss. Es ist schwierig, alle Funktionalitäten nur mit CRUD-Funktionen zu beschreiben, aber danach wird Ihr Leben viel einfacher und Sie werden feststellen, dass Sie viel kürzere Methoden schreiben.
Eine weitere Einschränkung der REST-Architektur besteht darin, dass bei der Kommunikation mit einem Client kein Sitzungskontext verwendet wird (zustandslos), d. h. alle Informationen, die erforderlich sind, um zu verstehen, wer der Client ist und was er will, werden mit der Webnachricht übergeben. Jeder Funktionsaufruf ist selbstbeschreibend, es gibt keine vorherige Konversation mit dem Kunden, auf die in der Nachricht Bezug genommen werden kann. Daher könnte ein Kunde nicht sagen: "Gib mir die nächste Seite", da Sie keine Sitzung haben, um zu speichern, was die vorherige Seite ist und welche Art von Seite Sie wollen. Das bedeutet, dass etwas mehr Daten in der Kommunikation übertragen werden müssen, aber denken Sie an den Unterschied zwischen der Suche nach einem Fehler, der mit der Funktion "Hol mir die nächste Seite" gemeldet wurde, und der Suche nach "Hol mir Seite 2 der Frage ID 2190836 in Stack Overflow".
Natürlich gibt es noch viel mehr, aber meiner bescheidenen Meinung nach sind dies die wichtigsten Konzepte in einem Teelöffel.