469 Stimmen

Was ist der Unterschied zwischen HTTP und REST?

Nachdem ich viel über die Unterschiede zwischen REST und SOAP gelesen habe, hatte ich den Eindruck, dass REST nur ein anderes Wort für HTTP ist. Kann jemand erklären, welche Funktionen REST zu HTTP hinzufügt?

Hinweis : Ich bin nicht auf der Suche nach einem Vergleich zwischen REST und SOAP.

347voto

aefxx Punkte 23877

Nein, REST ist der Weg HTTP sollte sein gebraucht .

Heute verwenden wir nur einen kleinen Teil der Methoden des HTTP-Protokolls - nämlich GET y POST . Die REST-Methode besteht darin, alle Methoden des Protokolls zu verwenden.

Zum Beispiel diktiert REST die Verwendung von DELETE um ein Dokument (sei es eine Datei, ein Zustand usw.) hinter einem URI zu löschen, während man bei HTTP ein GET o POST Abfrage wie ...product/?delete_id=22 .

195voto

Yuval Perelman Punkte 4121

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.

65voto

Dss Punkte 1867

REST erzwingt die Verwendung der verfügbaren HTTP-Befehle so, wie sie gedacht sind.

Zum Beispiel könnte ich das tun:

GET
http://example.com?method=delete&item=xxx

Für die übrigen Abfragen würde ich die "DELETE"-Anforderungsmethode verwenden, so dass der Abfrageparameter "method" nicht mehr erforderlich ist.

DELETE
http://example.com?item=xxx

48voto

Darrel Miller Punkte 133891

HTTP ist ein Anwendungsprotokoll. REST ist eine Reihe von Regeln, die, wenn sie befolgt werden, den Aufbau einer verteilten Anwendung ermöglichen, die eine bestimmte Reihe von wünschenswerten Einschränkungen hat.

Wenn Sie nach den wichtigsten Einschränkungen von REST suchen, die eine RESTful-Anwendung von einer beliebigen HTTP-Anwendung unterscheiden, würde ich sagen, dass die "Selbstbeschreibungs"-Einschränkung und die Hypermedia-Einschränkung (auch bekannt als Hypermedia as the Engine of Application State (HATEOAS)) die wichtigsten sind.

Die Selbstbeschreibungseinschränkung verlangt, dass eine RESTful-Anfrage in der Absicht des Benutzers vollständig selbstbeschreibend ist. Dies ermöglicht es Vermittlern (Proxies und Caches), die Nachricht sicher zu bearbeiten.

Bei der HATEOAS-Beschränkung geht es darum, Ihre Anwendung in ein Netz von Links zu verwandeln, bei dem der aktuelle Zustand des Clients auf seiner Position in diesem Netz basiert. Es ist ein kompliziertes Konzept und erfordert mehr Zeit, als ich im Moment habe.

33voto

Daniel Punkte 631

HTTP ist ein Vertrag, ein Kommunikationsprotokoll, und REST ist ein Konzept, ein architektonischer Stil, der HTTP, FTP oder andere Kommunikationsprotokolle verwenden kann, aber weitgehend mit HTTP verwendet wird.

REST impliziert eine Reihe von Einschränkungen, wie Server und Client interagieren sollten. HTTP ist ein Kommunikationsprotokoll mit einem bestimmten Mechanismus für die Datenübertragung zwischen Server und Client. Es wird am häufigsten in der REST-API verwendet, da REST vom WWW (World Wide Web) inspiriert wurde, das HTTP größtenteils verwendet hat, bevor REST definiert wurde, so dass es einfacher ist, den REST-API-Stil mit HTTP zu implementieren.

Es gibt drei Hauptbeschränkungen bei REST (aber es gibt noch mehr):

  1. Die Interaktion zwischen Server und Client sollte nur über Hypertext beschrieben werden.
  2. Server und Client sollten lose gekoppelt sein und keine Annahmen übereinander machen. Der Client sollte nur den Einstiegspunkt für Ressourcen kennen. Die Interaktionsdaten sollten vom Server in der Antwort bereitgestellt werden.
  3. Der Server sollte keine Informationen über den Anfragekontext speichern. Anfragen müssen unabhängig und idempotent sein (d.h. wenn dieselbe Anfrage unendlich oft wiederholt wird, wird genau dasselbe Ergebnis abgerufen)

Und HTTP ist nur ein Kommunikationsprotokoll (ein Werkzeug), mit dem dies erreicht werden kann.

Weitere Informationen finden Sie unter diesen Links:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X