Was ist der Unterschied zwischen HTTP und REST?

303

Nachdem ich viel über die Unterschiede zwischen REST und SOAP gelesen hatte, 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 suche keinen Vergleich zwischen REST und SOAP.

Update : Danke für deine Antworten. Jetzt ist mir klar geworden, dass REST nur eine Reihe von Regeln für die Verwendung von HTTP ist. Daher habe ich ein Follow-up zu den Vorteilen dieser Konventionen veröffentlicht .

Hinweis : Ich verstehe jetzt die Bedeutung von REST. Wie Emil Ivanov bemerkt, bedeutet REST, HTTP so zu verwenden, wie es sein soll. Ich bin mir jedoch nicht sicher, ob dies einen eigenen Begriff verdient, und ich verstehe den Hype nicht.

Dimitri C.
quelle
45
Nur als Randnotiz: Wahrscheinlich stammen 90% des Hype, den Sie heutzutage über REST hören, von Leuten, die das vollständige Bild von REST nicht wirklich verstehen. REST ist leider ein Schlagwort für den Verkauf geworden. Sie müssen viel Mist durchschneiden, um die wirklichen Vorteile herauszufinden.
Darrel Miller
7
Der Hype um REST ist wahrscheinlich darauf zurückzuführen, dass sich die Leute stark über SOAP ärgern. Alle sind einfach froh, der SOAP-Hölle zu entkommen: D
aefxx
28
Stellen Sie sich HTTP als einen Ball vor, mit dem Sie Spiele spielen können, und REST als ein bestimmtes Spiel wie Fußball. Einige werden sagen, Fußball ist das beste Spiel, andere werden nicht zustimmen. Warum verdient es seinen eigenen Begriff? Da alle Ballspiele aufgerufen werden, bedeutet "Ballspiel", dass Sie nicht feststellen können, welchen Regelsatz Sie verwenden. Auf diese Weise liest jeder aus demselben Liedblatt (sorry, gemischte Metapher)
Ross Drew
1
Jetzt haben wir eine andere Option GraphQL im Vergleich zu REST. Beide verwenden HTTP.
Hongbo Miao
1
@ RossDrew tolle Analogie .. es macht leichter zu verstehen.
Anoop

Antworten:

220

Nein, REST ist der Weg HTTP sollte werden verwendet .

Heute verwenden wir nur einen winzigen Teil der Methoden des HTTP-Protokolls - nämlich GETund POST. Der REST-Weg, dies zu tun, besteht darin, alle Methoden des Protokolls zu verwenden.

Beispielsweise schreibt REST die Verwendung DELETEzum Löschen eines Dokuments (sei es eine Datei, ein Status usw.) hinter einem URI vor, während Sie bei HTTP ein GEToder eine POSTAbfrage wie diese missbrauchen würden ...product/?delete_id=22.

aefxx
quelle
23
Und was wäre der große Vorteil dieser anderen Methoden?
Dimitri C.
7
Ich habe einen Link zu einem Beispiel aus der Praxis gepostet, das Ihnen die Vorteile zeigt. Prost.
Aefxx
8
-1 für die falsche Definition der Ruhe. Rest ist eine Art Architektur, keine Möglichkeit, Nachrichten über das Web zu senden. Für weitere Informationen: en.wikipedia.org/wiki/Representational_state_transfer
Yuval Perelman
4
wieder falsch. REST ist NICHT das Architekturprinzip des http / 1.0-Protokolls. RESTful Architektur wurde viel später erfunden. Die vom http-Protokoll angebotenen Funktionen passen zur REST-Architektur, die beiden sind jedoch nicht voneinander abhängig. Es geht nicht darum, das Rad neu zu erfinden, es geht darum, diese Konzepte zu verstehen
Yuval Perelman
4
@aefxx danke, das wusste ich nicht und habe nie die vollständige Dissertation gelesen. Ich würde das Abstimmen in Abstimmen ändern, wenn es nicht gesperrt wäre. Sie haben eine interessante Art zu debattieren, Sie könnten mir einfach einen Link geben und damit fertig sein. Schaschlik.
Yuval Perelman
94

HTTP ist ein Protokoll für die Kommunikation, das normalerweise für die Kommunikation mit Internetressourcen oder einer Anwendung mit einem Webbrowser-Client verwendet wird.

REST bedeutet, dass das Hauptkonzept, das Sie beim Entwerfen der Anwendung verwenden, die Ressource ist: Für jede Aktion, die Sie ausführen möchten, müssen Sie eine Ressource definieren, für die Sie normalerweise nur eine CRUD-Operation ausführen. Dies ist eine einfache Aufgabe. Aus diesem Grund ist es sehr praktisch, 4 im HTTP-Protokoll verwendete Verben gegen die 4 CRUD-Operationen zu verwenden (Get for Read, POST steht für CREATE, PUT steht für UPDATE und DELETE steht für DELETE). Dies unterscheidet sich vom älteren Konzept von RPC (Remote Procedure Call), bei dem Sie eine Reihe von Aktionen ausführen, die Sie als Ergebnis des Aufrufs des Benutzers ausführen möchten. Wenn Sie beispielsweise darüber nachdenken, wie Sie ein Facebook wie in einem Beitrag beschreiben können, können Sie mit RPC Dienste namens AddLikeToPost und RemoveLikeFromPost erstellen und diese zusammen mit all Ihren anderen Diensten in Bezug auf FB-Beiträge verwalten, sodass Sie keine speziellen Dienste erstellen müssen Objekt für Like. Mit REST haben Sie ein Like-Objekt, das separat mit den Funktionen Löschen und Erstellen verwaltet wird. Dies bedeutet auch, dass eine separate Entität in Ihrer Datenbank beschrieben wird. Das mag wie ein kleiner Unterschied aussehen, aber so zu arbeiten würde normalerweise einen viel einfacheren Code und eine viel einfachere Anwendung ergeben. Bei diesem Design ist der größte Teil der Logik der App aus der Struktur (dem Modell) des Objekts ersichtlich, im Gegensatz zu RPC, mit dem Sie normalerweise explizit viel mehr Logik hinzufügen müssten.

Das Entwerfen einer RESTful-Anwendung ist normalerweise viel schwieriger, da Sie komplizierte Dinge auf einfache Weise beschreiben müssen. Es ist schwierig, alle Funktionen nur mit CRUD-Funktionen zu beschreiben, aber danach wäre Ihr Leben viel einfacher und Sie werden feststellen, dass Sie viel kürzere Methoden schreiben werden.

Eine weitere Einschränkung der vorhandenen REST-Architektur besteht darin, bei der Kommunikation mit dem Client keinen Sitzungskontext zu verwenden (zustandslos). Dies bedeutet, dass alle Informationen, die erforderlich sind, um zu verstehen, wer der Client ist und was er möchte, mit der Webnachricht übergeben werden. Jeder Aufruf einer Funktion ist selbsterklärend. Es gibt keine vorherige Konversation mit dem Client, auf die in der Nachricht verwiesen werden kann. Daher konnte ein Kunde Ihnen nicht sagen, dass Sie mir die nächste Seite geben sollen, da Sie keine Sitzung haben, in der Sie speichern können, was die vorherige Seite ist und welche Art von Seite Sie möchten. Der Kunde müsste sagen: "Mein Name ist yuval, get mir Seite 2 eines bestimmten Beitrags in einem bestimmten Forum ". Das bedeutet, dass ein bisschen mehr Daten in der Kommunikation übertragen werden müssten. Denken Sie jedoch an den Unterschied zwischen dem Auffinden eines Fehlers, der von der Funktion "Nächste Seite abrufen" gemeldet wurde, im Gegensatz zu ".

Natürlich steckt noch viel mehr dahinter, aber meiner Meinung nach sind das die Hauptkonzepte eines Teelöffels.

Yuval Perelman
quelle
31

HTTP ist ein Anwendungsprotokoll. REST ist eine Reihe von Regeln, mit deren Hilfe Sie eine verteilte Anwendung erstellen können, die bestimmte wünschenswerte Einschränkungen aufweist.

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

Die Selbstbeschreibungsbeschränkung erfordert, dass eine RESTful-Anforderung in der Absicht des Benutzers vollständig selbstbeschreibend ist. Dadurch können Vermittler (Proxys und Caches) sicher auf die Nachricht reagieren.

Bei der HATEOAS-Einschränkung geht es darum, Ihre Anwendung in ein Linknetz zu verwandeln, bei dem der aktuelle Status des Clients auf seinem Platz in diesem Web basiert. Es ist ein kniffliges Konzept und erfordert mehr Zeit zum Erklären als ich es gerade habe.

Darrel Miller
quelle
19

Soweit ich weiß, erzwingt REST die Verwendung der verfügbaren HTTP-Befehle so, wie sie verwendet werden sollten.

Zum Beispiel könnte ich tun:

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

Im Ruhezustand würde ich jedoch die Anforderungsmethode "DELETE" verwenden, sodass der Abfrageparameter "method" nicht mehr erforderlich ist

DELETE
http://example.com?item=xxx
Dss
quelle
15

Nicht ganz...

http://en.wikipedia.org/wiki/Representational_State_Transfer

REST wurde ursprünglich im Zusammenhang mit HTTP beschrieben, ist jedoch nicht auf dieses Protokoll beschränkt. RESTful-Architekturen können auf anderen Protokollen der Anwendungsschicht basieren, wenn sie bereits ein reichhaltiges und einheitliches Vokabular für Anwendungen bereitstellen, das auf der Übertragung eines aussagekräftigen Darstellungszustands basiert. RESTful-Anwendungen maximieren die Nutzung der bereits vorhandenen, genau definierten Schnittstelle und anderer integrierter Funktionen des ausgewählten Netzwerkprotokolls und minimieren das Hinzufügen neuer anwendungsspezifischer Funktionen.

http://www.looselycoupled.com/glossary/SOAP

(Simple Object Access Protocol) Der Standard für Webdienstnachrichten. Basierend auf XML definiert SOAP ein Umschlagformat und verschiedene Regeln zur Beschreibung seines Inhalts. (Mit WSDL und UDDI) als einer der drei Grundstandards für Webdienste angesehen, ist es das bevorzugte Protokoll für den Austausch von Webdiensten, aber keineswegs das einzige. Befürworter von REST sagen, dass es unnötige Komplexität hinzufügt.

LiamB
quelle
3
Wer hat etwas über SOAP gesagt?
Darrel Miller
11
Der Typ, der die Frage gestellt hat ... "Nachdem er viel über die Unterschiede zwischen REST und SOAP
gelesen hat
8

REST ist eine spezielle Herangehensweise an das Design großer Systeme (wie das Web).

Es ist eine Reihe von "Regeln" (oder "Einschränkungen").

HTTP ist ein Protokoll, das versucht, diese Regeln einzuhalten.

Mike
quelle
Ich würde sagen, wenn Sie HTTP als Transportmittel für Ihren REST-Service verwenden, ist es einfach, diese Regeln einzuhalten.
Abatishchev
7

REST = Representational State Transfer

REST ist eine Reihe von Regeln, mit deren Hilfe Sie eine verteilte Anwendung erstellen können, die bestimmte wünschenswerte Einschränkungen aufweist.

REST ist ein Protokoll zum Austausch von Nachrichten (XML, JSON usw.), die HTTP zum Transport dieser Nachrichten verwenden können.

Eigenschaften:

Es ist zustandslos, was bedeutet, dass im Idealfall keine Verbindung zwischen Client und Server aufrechterhalten werden sollte. Es liegt in der Verantwortung des Clients, seinen Kontext an den Server zu übergeben, und dann kann der Server diesen Kontext speichern, um die weitere Anforderung des Clients zu verarbeiten. Beispielsweise wird die vom Server verwaltete Sitzung durch die vom Client übergebene Sitzungskennung identifiziert.

Vorteile der Staatenlosigkeit:

  1. Web Services können jeden Methodenaufruf separat behandeln.
  2. Web Services müssen die vorherige Interaktion des Clients nicht beibehalten.
  3. Dies vereinfacht wiederum das Anwendungsdesign.
  4. HTTP ist im Gegensatz zu TCP selbst ein zustandsloses Protokoll. Daher arbeiten RESTful Web Services nahtlos mit den HTTP-Protokollen zusammen.

Nachteile der Staatenlosigkeit:

  1. Zu jeder Anforderung muss eine zusätzliche Ebene in Form einer Überschrift hinzugefügt werden, um den Status des Clients beizubehalten.
  2. Aus Sicherheitsgründen müssen wir jeder Anfrage eine Header-Information hinzufügen.

Von REST unterstützte HTTP-Methoden:

GET: / string / someotherstring Es ist idempotent und sollte idealerweise bei jedem Anruf die gleichen Ergebnisse zurückgeben

PUT: Wie GET. Idempotent und wird zum Aktualisieren von Ressourcen verwendet.

POST: sollte eine URL und einen Text enthalten, die zum Erstellen von Ressourcen verwendet werden. Mehrere Anrufe sollten idealerweise unterschiedliche Ergebnisse liefern und mehrere Produkte erstellen.

LÖSCHEN: Zum Löschen von Ressourcen auf dem Server.

KOPF:

Die HEAD-Methode ist identisch mit GET, außer dass der Server in der Antwort KEINEN Nachrichtentext zurückgeben darf. Die in den HTTP-Headern als Antwort auf eine HEAD-Anforderung enthaltenen Metainformationen MÜSSEN mit den Informationen identisch sein, die als Antwort auf eine GET-Anforderung gesendet wurden.

OPTIONEN:

Mit dieser Methode kann der Client die mit einer Ressource verbundenen Optionen und / oder Anforderungen oder die Funktionen eines Servers ermitteln, ohne eine Ressourcenaktion zu implizieren oder einen Ressourcenabruf einzuleiten.

HTTP-Antworten

Hier finden Sie alle Antworten .

Hier einige wichtige: 200 - OK 3XX - Zusätzliche Informationen, die vom Client und der URL-Umleitung benötigt werden 400 - Ungültige Anforderung
401 - Nicht autorisiert für den Zugriff
403 - Verboten
Die Anforderung war gültig, aber der Server lehnt die Aktion ab. Der Benutzer verfügt möglicherweise nicht über die erforderlichen Berechtigungen für eine Ressource oder benötigt ein Konto.

404 - Nicht gefunden
Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar. Nachträgliche Anfragen des Kunden sind zulässig.

405 - Methode nicht zulässig Eine Anforderungsmethode wird für die angeforderte Ressource nicht unterstützt. Beispiel: Eine GET-Anforderung in einem Formular, für das Daten über POST angezeigt werden müssen, oder eine PUT-Anforderung in einer schreibgeschützten Ressource.

404 - Anforderung nicht gefunden
500 - Interner Serverfehler
502 - Fehlerhafter Gateway-Fehler

Pritam Banerjee
quelle
5

HTTP ist ein Kommunikationsprotokoll, das Nachrichten über ein Netzwerk transportiert. SOAP ist ein Protokoll zum Austausch von XML-basierten Nachrichten, die HTTP zum Transport dieser Nachrichten verwenden können. Rest ist ein Protokoll zum Austausch von (XML- oder JSON-) Nachrichten, die HTTP zum Transport dieser Nachrichten verwenden können.

vamsi
quelle
Ihre Antwort beantwortet die Frage nicht.
Anis
Ihre HTTP- und SOAP-Definition war großartig und hat die Frage für mich geklärt. Aber ich glaube nicht, dass Rest ein Protokoll ist. Es ist eine Architekturrichtlinie, die die korrekte Verwendung des HTTP-Transportprotokolls erzwingt.
CapturedTree
5

HTTP is a contract, a communication protocol and REST is a concept, an architectural style Dies kann HTTP, FTP oder andere Kommunikationsprotokolle verwenden, wird jedoch häufig bei HTTP verwendet.

REST implies a series of constraints about how Server and Client should interact. HTTP is a communication protocol with a given mechanism for server-client data transferEs wird am häufigsten in der REST-API verwendet, nur weil REST was inspired by WWW (world wide web) which largely used HTTPvor der Definition von REST die Implementierung des REST-API-Stils mit HTTP einfacher ist.

There are three major constraints in REST (but there are more):

1. Die Interaktion zwischen Server und Client sollte nur über Hypertext beschrieben werden.

2.Server und Client sollten lose miteinander verbunden sein und keine Annahmen über einander treffen. Der Client sollte nur den Ressourceneintrittspunkt kennen. Interaktionsdaten sollten vom Server in der Antwort bereitgestellt werden.

3.Der Server sollte keine Informationen zum Anforderungskontext speichern. Anforderungen müssen unabhängig und idempotent sein (dh wenn dieselbe Anforderung unendlich wiederholt wird, wird genau dasselbe Ergebnis abgerufen).

Und HTTP ist nur ein Kommunikationsprotokoll (ein Tool), das dazu beitragen kann.

Weitere Informationen finden Sie unter folgenden Links:

https://martinfowler.com/articles/richardsonMaturityModel.html http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Daniel
quelle
4

REST ist nicht unbedingt an HTTP gebunden . RESTful-Webdienste sind nur Webdienste, die einer RESTful-Architektur folgen.

What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface
Rahul Patel
quelle
HTTP ist 1-Client-server, 2-stateless, 3-casheable. Welche zusätzlichen Funktionen / Einschränkungen hat REST dann für HTTP festgelegt? Was können wir mit REST tun, was mit HTTP allein nicht möglich ist?
Wafeeq
4

Von Sie kennen den Unterschied zwischen HTTP und REST nicht

Die REST-Architektur und das HTTP 1.1-Protokoll sind also unabhängig voneinander, aber das HTTP 1.1-Protokoll wurde als ideales Protokoll entwickelt, um den Prinzipien und Einschränkungen von REST zu folgen. Eine Möglichkeit, die Beziehung zwischen HTTP und REST zu betrachten, besteht darin, dass REST das Design ist und HTTP 1.1 eine Implementierung dieses Designs ist.

Farsan Rashid
quelle
2

REST-APIs müssen hypertextgesteuert sein

Im Blog von Roy Fielding finden Sie eine Reihe von Möglichkeiten, um zu überprüfen, ob Sie eine HTTP-API oder eine REST-API erstellen:

Beachten Sie bei API-Designern die folgenden Regeln, bevor Sie Ihre Erstellung als REST-API bezeichnen:

  • Eine REST-API sollte nicht von einem einzelnen Kommunikationsprotokoll abhängig sein, obwohl ihre erfolgreiche Zuordnung zu einem bestimmten Protokoll von der Verfügbarkeit von Metadaten, der Auswahl von Methoden usw. abhängen kann. Im Allgemeinen muss jedes Protokollelement, das einen URI zur Identifizierung verwendet, dies zulassen jedes URI-Schema, das für diese Identifizierung verwendet werden soll. [Ein Misserfolg bedeutet hier, dass die Identifizierung nicht von der Interaktion getrennt ist.]
  • Eine REST-API sollte keine Änderungen an den Kommunikationsprotokollen enthalten, außer das Ausfüllen oder Korrigieren der Details von nicht spezifizierten Bits von Standardprotokollen, wie z. B. der PATCH-Methode von HTTP oder dem Link-Header-Feld. Problemumgehungen für fehlerhafte Implementierungen (z. B. solche Browser, die dumm genug sind zu glauben, dass HTML den Methodensatz von HTTP definiert) sollten separat oder zumindest in Anhängen definiert werden, mit der Erwartung, dass die Problemumgehung irgendwann veraltet sein wird. [Ein Fehler hier impliziert, dass die Ressourcenschnittstellen objektspezifisch und nicht generisch sind.]
  • Eine REST-API sollte fast den gesamten beschreibenden Aufwand für die Definition der Medientypen verwenden, die zur Darstellung von Ressourcen und zur Steuerung des Anwendungsstatus verwendet werden, oder für die Definition erweiterter Beziehungsnamen und / oder hypertextfähiger Markierungen für vorhandene Standardmedientypen. Jeder Aufwand, der aufgewendet wird, um zu beschreiben, welche Methoden für welche URIs von Interesse verwendet werden sollen, sollte vollständig im Rahmen der Verarbeitungsregeln für einen Medientyp definiert werden (und in den meisten Fällen bereits durch vorhandene Medientypen definiert). [Ein Fehler hier impliziert, dass Out-of-Band-Informationen die Interaktion anstelle von Hypertext steuern.]
  • Eine REST-API darf keine festen Ressourcennamen oder -hierarchien definieren (eine offensichtliche Kopplung von Client und Server). Server müssen die Freiheit haben, ihren eigenen Namespace zu steuern. Ermöglichen Sie Servern stattdessen, Clients anzuweisen, wie geeignete URIs erstellt werden sollen, wie dies in HTML-Formularen und URI-Vorlagen der Fall ist, indem Sie diese Anweisungen in Medientypen und Verknüpfungsbeziehungen definieren. [Ein Fehler hier impliziert, dass Clients aufgrund von Out-of-Band-Informationen eine Ressourcenstruktur annehmen, z. B. einen domänenspezifischen Standard, der das datenorientierte Äquivalent zur funktionalen Kopplung von RPC darstellt.]
  • Eine REST-API sollte niemals Ressourcen enthalten, die für den Client von Bedeutung sind. Spezifikationsautoren können Ressourcentypen zur Beschreibung der Serverimplementierung hinter der Schnittstelle verwenden, diese Typen müssen jedoch für den Client irrelevant und unsichtbar sein. Die einzigen Typen, die für einen Kunden von Bedeutung sind, sind der Medientyp der aktuellen Darstellung und standardisierte Beziehungsnamen. [dito]
  • Eine REST-API sollte ohne Vorkenntnisse über den ursprünglichen URI (Lesezeichen) und den Satz standardisierter Medientypen hinaus eingegeben werden, die für die beabsichtigte Zielgruppe geeignet sind (dh von jedem Client, der die API möglicherweise verwendet, verstanden werden). Ab diesem Zeitpunkt müssen alle Anwendungsstatusübergänge durch die Clientauswahl von vom Server bereitgestellten Auswahlmöglichkeiten gesteuert werden, die in den empfangenen Darstellungen vorhanden sind oder durch die Manipulation dieser Darstellungen durch den Benutzer impliziert werden. Die Übergänge können durch das Wissen des Kunden über Medientypen und Ressourcenkommunikationsmechanismen bestimmt (oder begrenzt) werden, die beide im laufenden Betrieb verbessert werden können (z. B. Code-on-Demand). [Ein Fehler hier impliziert, dass Out-of-Band-Informationen die Interaktion anstelle von Hypertext steuern.]
icc97
quelle