Was ist der Unterschied zwischen REST-API und RESTful-API?

Blog

Was ist der Unterschied zwischen REST-API und RESTful-API?

Was ist der Unterschied zwischen REST-API und RESTful-API?

Die kurze Antwort ist, dass REST für Representational State Transfer steht. Es ist ein Architekturmuster zum Erstellen von Webdiensten. Ein RESTful-Dienst implementiert dieses Muster.

Die lange Antwort beginnt mit einer Art und es hängt davon ab und geht mit vollständigeren Definitionen weiter.

REST definieren

Beginnen wir damit, zu definieren, was REST ist und was nicht. Für einige bedeutet REST einen Server, der JSON-Dokumente mit einem Client über HTTP austauscht. Das ist nicht nur keine vollständige Definition, sondern auch nicht immer richtig. Die REST-Spezifikation erfordert weder HTTP noch JSON. (Die Spezifikation erwähnt JSON oder XML überhaupt nicht.)

Die Ursprünge von REST

Roy Fielding führte das REST-Architekturmuster in einer Dissertation aus dem Jahr 2000 ein. Das Papier definiert ein Mittel für Clients und Server zum Austausch von Anwendungsdaten. Ein wesentliches Merkmal ist, dass der Kunde im Voraus nichts über die Anwendung wissen muss. Der Link führt zu Kapitel fünf seines Aufsatzes. Während die gesamte Dissertation das Wie und Warum von REST beschreibt, definiert dieses Kapitel das Architekturmuster.

Fielding stellt keine spezifischen Anforderungen. Stattdessen definiert er REST in Bezug auf Einschränkungen und architektonische Elemente.

Architektonische Einschränkungen von REST

Hier ist eine Zusammenfassung der Einschränkungen.

  • Client-Server – REST-Anwendungen verfügen über einen Server, der Anwendungsdaten und -status verwaltet. Der Server kommuniziert mit einem Client, der die Benutzerinteraktionen abwickelt. Eine klare Trennung der Anliegen trennt die beiden Komponenten. Dies bedeutet, dass Sie sie in unabhängigen Tracks aktualisieren und verbessern können.
  • Zustandslos – Server behalten keinen Client-Zustand bei. Clients verwalten ihren Anwendungsstatus. Ihre Anfragen an Server enthalten alle Informationen, die zu ihrer Verarbeitung erforderlich sind.
  • Zwischenspeicherbar – Server müssen ihre Antworten als zwischenspeicherbar markieren oder nicht. Infrastrukturen und Clients können sie also nach Möglichkeit zwischenspeichern, um die Leistung zu verbessern. Sie können über nicht zwischenspeicherbare Informationen verfügen, sodass kein Client veraltete Daten verwendet.
  • Einheitliche Schnittstelle – Diese Einschränkung ist die bekannteste Funktion oder Regel von REST, je nachdem, wen Sie fragen. Fielding sagt Das zentrale Merkmal, das den REST-Architekturstil von anderen netzwerkbasierten Stilen unterscheidet, ist die Betonung einer einheitlichen Schnittstelle zwischen den Komponenten. REST-Services stellen Daten als Ressourcen mit einem konsistenten Namensraum bereit. Wir werden dies im Folgenden ausführlich behandeln.
  • Schichtsystem – Komponenten im System können nicht über ihre Schicht hinaus sehen. Sie können also problemlos Load-Balancer und Proxys hinzufügen, um die Sicherheit oder Leistung zu verbessern.

Ein RESTful-Dienst ist mehr als ein Webserver, der JSON- oder andere Dokumente austauscht. Diese Einschränkungen wirken zusammen, um einen sehr spezifischen Anwendungstyp zu erstellen.

Wie kaufe ich Epik-Krypto?

Anwenden der Einschränkungen

Erstens verbinden sich Client-Server, Schichtsysteme und zustandslose Beschränkungen zu einer Anwendung mit festen Grenzen und klaren Trennungen zwischen den Belangen. Daten werden auf Anfrage vom Server zum Client verschoben. Der Client zeigt sie an oder manipuliert sie. Wenn sich der Status ändert, sendet der Client ihn zur Speicherung an den Server zurück. Fielding kontrastiert REST speziell mit Architekturen, die verteilte Objekte verwenden, um Daten vor anderen Komponenten zu verbergen. In REST teilen Client und Server Wissen über Daten und Status. Die Architektur verbirgt keine Daten, sie verbirgt nur Implementierungen.

Die Cacheable- und Uniform-State-Constraints gehen noch einen Schritt weiter. Anwendungsdaten stehen Clients in einer klaren und konsistenten Oberfläche zur Verfügung und werden nach Möglichkeit zwischengespeichert.

Das ist also die technische Definition von REST. Wie sieht es in der realen Welt aus?

RPC über HTTP vs. RESTful

Wenn jemand sagt, dass ein Dienst kein REST ist, schaut er sich oft die URIs an oder wie der Dienst HTTP-Verben verwendet. Sie beziehen sich auf die Präsentation von Daten durch REST als einen einheitlichen Satz von Ressourcen.

http//fxnetworks.com/activate roku

Diese Unterscheidung wird manchmal als Unterschied zwischen Remote Procedure Calls (RPC) und REST bezeichnet. Stellen Sie sich einen Webservice zum Auflisten, Hinzufügen und Entfernen von Artikeln aus einem E-Commerce-Inventar vor.

In einer Version gibt es eine einzelne URL, die wir mit HTTP GETs oder POSTs abfragen. Sie interagieren mit dem Dienst, indem Sie ein Dokument POST senden und den Inhalt so einstellen, dass er widerspiegelt, was Sie tun möchten.

Fügen Sie neue Elemente mit einem POST mit einem NewItem hinzu:

POST /inventory HTTP/1.1 { 'NewItem': { 'name': 'new item', 'price': '9.99', 'id': '1001' } }

Abfrage von Artikeln mit einem POST und einem ItemRequest:

POST /inventory HTTP/1.1 { 'ItemRequest': { 'id': '1001' } }

Einige Implementierungen akzeptieren auch eine Anforderung für ein neues Element mit einem get.

POST /inventory?id=1001 HTTP/1.1

Wir ändern oder löschen auch Artikel mit einem POST und einem ItemDelete oder ItemUpdate.

POST /inventory HTTP/1.1 { 'ItemDelete': { 'id': '1001' } }

Das ist kein REST. Wir tauschen nicht den Zustand der Ressourcen aus. Wir rufen eine Funktion mit Argumenten auf, die sich zufällig in einem JSON-Dokument befinden, oder URL-Argumente.

Ein RESTful-Dienst verfügt über einen URI für jeden Artikel im Inventar.

Das Hinzufügen eines neuen Elements würde also wie im obigen Beispiel aussehen.

POST /item HTTP/1.1 { 'Item': { 'name': 'new item', 'price': '9.99', 'id': '1001' } }

Aber die Ähnlichkeiten enden hier. Das Abrufen eines Elements ist immer ein GET:

Farbe der Matte-Symbolleiste
GET /item/1001 HTTP/1.1

Löschen ist ein DELETE:

DELETE /item/1001 HTTP/1.1

Das Ändern eines Elements ist ein PUT:

POST /inventory HTTP/1.1 { 'Item': { 'name': 'new item', 'price': '7.99', 'id': '1001' } }

Der Unterschied ist wichtig. In REST Operationen, die unterschiedliche HTTP-Aktionen verwenden. Diese Verben entsprechen direkt der Aktivität in den Daten. GET, POST, PUT, DELETE und PATCH haben alle spezifische Verträge. Die meisten gut gestalteten REST-APIs geben abhängig vom Ergebnis der Anfrage auch spezifische HTTP-Codes zurück.

Der kritische Punkt ist, dass die URIs mit den Daten arbeiten, nicht mit Remote-Methoden.

Aber es gibt noch einen weiteren Grund, warum das Ressourcenmodell wichtig ist.

REST vs RESTful und das Richardson Maturity Model

Wenn Sie Ihre URIs nach Ressourcen modellieren und HTTP-Verben verwenden, machen Sie Ihre API vorhersehbar. Sobald Entwickler wissen, wie Sie Ihre Ressourcen definiert haben, können sie fast vorhersagen, wie die API aussieht. Auch hier liegt der Schwerpunkt auf dem Verständnis der Daten, nicht der Operationen.

Aber selbst wenn Sie die API nicht vollständig vorhersehbar machen können, können Sie jeden REST-Service mit Hypertext dokumentieren. Jedes in der Inventar-App zurückgegebene Element würde also Links zum Löschen, Ändern oder Festlegen der Inventarebene der Ressource enthalten. Fielding sagt, dass ein Dienst, bevor er RESTful ist, Hypertext-Medien als Teil der API bereitstellen muss.

Viele Websites erfüllen diese Anforderung nicht, werden aber immer noch als REST bezeichnet. Tatsache ist, dass viele Websites auf die eine oder andere Weise gegen die Regeln verstoßen. So viele, dass Leonard Richardson ein Modell erstellt hat, das REST in Compliance-Stufen aufgliedert

Wir haben die Quellebenen bereits behandelt:

  • 0 – Exportieren einer API über HTTP mit Methoden, die mit Argumenten aufgerufen werden
  • 1 – Ressourcen statt Methoden exportieren
  • 2 – Richtige Verwendung von HTTP-Verben
  • 3 – Exportieren von Hypertext mit Objekten, die die gesamte oder einen Teil der API auffindbar machen.

Richardsons Modell ist sein eigenes und passt nicht direkt in Fieldings Spezifikation. Da Fielding Level 3 erfordert, würde er sagen, dass die meisten Apps sowieso kein REST sind.

Der Punkt ist, dass viele Dienste, die wir umgangssprachlich als REST bezeichnen, technisch nicht sind.

REST vs RESTful: Ist das wichtig?

Ist der Vergleich REST vs. RESTful wichtig? Wahrscheinlich nicht. Wie gut Ihre Architektur einem beliebigen Standard entspricht, ist nicht so wichtig, wie gut sie Ihren Anforderungen entspricht und mit Ihrem Unternehmen wachsen kann.

Mongodb Realm vs Firebase

Das REST-Architekturmuster hat viele Vorteile. Fielding hat es für das Web entworfen und 18 Jahre später sind die meisten Einschränkungen, die er sich vorgestellt hatte, immer noch bei uns. Im Jahr 2000 hatten wir weder Android noch das iPhone. IE5 hatte 50 % des Browser-Marktanteils. Der größte Rivale war Firefox. Fielding erkannte jedoch, welche Online-Anwendungen benötigt wurden und wie sich Web-Clients von HTML-Display-Engines zu vollständigen Anwendungen entwickeln würden. Die Tools, die wir heute verwenden, sind an REST angepasst, nicht umgekehrt.

Vielen Dank fürs Lesen. Hoffe, dieses Tutorial wird Ihnen helfen!

#REST API #RESTful API #Entwickler #Programmierung #api