REST steht für REpresentational State Transfer und ist ein Architekturstil für die Entwicklung von APIs, die über das HTTP-Protokoll kommunizieren.
Hinter den Kulissen müssen APIs im Rahmen ihrer Operationen häufig Daten bearbeiten. Meist werden diese Datenoperationen – abgekürzt CRUD – auf Datenbanken angewendet. CRUD steht für Create (Erstellen), Read (Lesen), Update (Aktualisieren) und Delete (Löschen), also die vier grundlegenden Operationen.
Da durch REST-API-Aufrufe CRUD-Operationen ausgeführt werden, müssen API-Entwickler und Data Engineers die Beziehung zwischen den beiden kennen. Obwohl CRUD und REST unterschiedlichen Zwecken dienen, sollten sie sich bezüglich ihres Verhaltens nicht gegenseitig beeinträchtigen.
In diesem Artikel erläutern wir, was CRUD und REST sind, welche Gemeinsamkeiten und Unterschiede sie haben und wie sich ihr Verhalten am besten überwachen lässt.
Was ist CRUD?
CRUD-Operationen werden für herkömmliche relationale Datenbankverwaltungssysteme (z. B. PostgreSQL oder SQL Server) und die neueren NoSQL-Datenbanken (z. B. MongoDB oder DynamoDB) genutzt. Obwohl auch dateiorientierte Operationen Daten bearbeiten, bezieht sich CRUD im Allgemeinen auf datensatzorientierte Operationen in Computerdatenbanken.
In relationalen Datenbankverwaltungssystemen (RDBMS) werden einzelne Tabellenzeilen einer Datenbank als Datensatz bezeichnet, während Spalten Attribute oder Felder genannt werden. Schauen wir uns nun die vier CRUD-Operationen nacheinander an.
Create (Erstellen)
Die Create-Operation erstellt einen neuen Datenbankeintrag. Bei SQL wird diese Operation mit INSERT
ausgeführt.
Lesen
Die Read-Operation ruft basierend auf Suchkriterien Datensätze (je nach Datenbanktyp auch Dokumente bzw. Elemente) aus einer Datenbanktabelle (oder Kollektion) ab. Bei SQL wird diese Operation mit SELECT
ausgeführt. Read-Operationen können je nach Abfrage auch eine Teilmenge von Datensätzen und Feldern zurückgeben.
Update (Aktualisieren)
Die Update-Operation, die bei SQL ebenfalls UPDATE
heißt, ändert vorhandene Datensätze in einer Datenbank. Ebenso wie die Read-Operation kann sich die Update-Operation auf alle oder nur einen Teil von Datensätzen bzw. Feldern beziehen.
Delete (Löschen)
Die Delete-Operation, die bei SQL ebenfalls DELETE
heißt, entfernt einen oder mehrere Datensätze aus der Datenbank.
In NoSQL-Datenbanken können die Ausdrücke, die den CRUD-Operationen entsprechen, je nach Plattform, Datenstruktur und Sprache unterschiedlich sein. In MongoDB gilt beispielsweise:
- Die Create-Operation verwendet
db.collection.insertOne()
oderdb.collection.insertMany()
. - Die Read-Operation verwendet
db.collection.find()
oderdb.collection.findOne()
. - Die Update-Operation verwendet
db.collection.updateOne()
,db.collection.updateMany()
oderdb.collection.replaceOne()
. - Die Delete-Operation verwendet
db.collection.deleteOne()
oderdb.collection.deleteMany()
.
Meist führt der API-Anwendungscode CRUD-Operationen aus, indem er gespeicherte Prozeduren, Funktionen oder Trigger im RDBMS aufruft. In einigen Fällen übergibt der API-Code auch dynamisch generierte SQL-Befehle an das Datenbank-Modul.
In NoSQL-Datenbanken sendet der API-Anwendungscode die Befehle über den Datenbanktreiber. Beispielsweise kann eine Java-Anwendung die HBase-Treiberbibliothek aufrufen, um CRUD-Befehle an die Datenbank zu schicken. Hinter den Kulissen übersetzt der Treiber die Java-Befehle und wendet sie auf die Datenbank an.
Ein Praxisbeispiel für CRUD
Schauen wir uns ein Beispiel für CRUD in der Praxis an. Wenn ein Benutzer eine Reise über eine Online-Reiseservice-App bucht, erstellt die Anwendung einen Datensatz für die Reservierung, liest Informationen über verfügbare Hotels und Zimmer und aktualisiert die Liste der verfügbaren Zimmer, wenn eine Reservierung bestätigt wird, oder sie löscht den gesamten Reservierungsdatensatz, wenn der Benutzer die Anfrage abbricht. Ähnliche Operationen laufen in jeder transaktionsverarbeitenden Anwendung ab.
Was ist REST?
REST ist ein Architekturstil für APIs, der häufig in verteilten Anwendungen eingesetzt wird. REST-APIs (oder RESTful-APIs) sind Anwendungen, die den Prinzipien der REST-Architektur entsprechen und es Client-Anwendungen sowie anderen APIs ermöglichen, über ihre API-Endpunkte mit ihnen zu interagieren. Anwendungen, die auf RESTful-APIs zugreifen, senden ihre Anfragen in der Regel über HTTP-Methoden. Dies sind die sechs Grundprinzipien von REST:
- Einheitliche Schnittstelle: Die einheitliche Schnittstelle ermöglicht es jedem API-Client, stets auf die gleiche standardisierte Weise mit dem Server zu kommunizieren, unabhängig von der Programmiersprache oder Implementierung des Clients oder Servers.
- Client-Server: Das Client-Server-Modell sieht getrennte Rollen für den Client und den API-Server vor. Der Server ist für Backend-Funktionen wie Datenspeicherung, Validierung und Authentifizierung verantwortlich. Der Client übernimmt die Benutzeroberfläche, die Erstellung von Abfragen usw.
- Zustandslosigkeit: Um zustandslos zu sein, muss jede Client-Anfrage an die API alle Informationen enthalten, die der Server zur Ausführung der Aufgabe benötigt. Der Server speichert keine Informationen über den Sitzungszustand des Clients oder Servers. Für die API ist jede Client-Anfrage neu und von der vorherigen Anfrage getrennt.
- Caching: Das Caching-Prinzip schreibt vor, dass die Antwort von der API bestimmt, ob der Client die Antwort der API zwischenspeichern darf. Die API markiert die Antwort als zwischenspeicherbar oder nicht zwischenspeicherbar.
- Mehrschichtige Systeme: Die Schichtung bezieht sich auf die Einbeziehung optionaler Komponenten, die Funktionalität bereitstellen, z. B. Lastenausgleich, Validierung usw. Diese Schichten müssen für den Client sichtbar sein. Die Komponenten in den jeweiligen Schichten dürfen nichts anderes sehen können als die Schicht, mit der sie arbeiten.
- Code on Demand (optional): Mit Code on Demand können Clients Code vom API-Server herunterladen und ausführen.
REST-APIs sind in modernen Anwendungen weit verbreitet. Sie werden zum Beispiel in großem Umfang in Wetter-APIs, Video-Streaming-Diensten, sozialen Medien oder Ridesharing-Anwendungen genutzt.
HTTP-Methoden
Clients verpacken RESTful-API-Anfragen mit HTTP-Methoden:
- GET: Mit der GET-Anfrage wird die API aufgefordert, eine Ressource (z. B. einen Datenbankeintrag oder den Inhalt einer Datei) abzurufen und an den Client zu schicken.
- POST: Mit der POST-Methode schickt der Client Daten an den API-Server, der mit den bereitgestellten Daten eine Ressource erstellt.
- PUT: Wenn der Client eine PUT-Anfrage an die API sendet, verweist er damit auf den URI einer bestimmten Ressource und stellt Daten im Anfragetext bereit. Nachdem der API-Server die PUT-Anfrage erhalten hat, prüft er, ob die Ressource bereits existiert. Wenn die Ressource bereits vorhanden ist, aktualisiert die API die Ressource mit den in der PUT-Anfrage enthaltenen Daten. Wenn die Ressource noch nicht existiert, erstellt die API die Ressource mit den bereitgestellten Daten.
- PATCH: Der Client sendet eine PATCH-Anfrage an die API, um eine vorhandene Ressource teilweise zu aktualisieren.
- DELETE: Der Client sendet eine DELETE-Anfrage an die API, um eine vorhandene Ressource zu löschen.
Beispiele für REST-API-Anfragen
Es gibt mehrere Client-Tools, die Anfragen an API-Endpunkte schicken können. Ein gängiges Befehlszeilentool ist cURL. Nachfolgend finden Sie einige Beispiele dafür, wie mit cURL HTTP-Anfragen an einen fiktiven REST-API-Endpunkt gesendet werden.
Der Endpunkt für unsere fiktive REST-API ist http://www.foobar.com
. Wir schicken verschiedene HTTP-Anfragen an diese API, um Kundendatensätze zu erstellen, zu lesen, zu aktualisieren oder zu löschen.
Im folgenden Code-Ausschnitt fordert der cURL-Client Informationen über einen Kunden mit der Kunden-ID 19 an. Dies ist eine GET-Anfrage.
curl -v http://www.foobar.com/find_customert_record?id=19
Als Nächstes fügen wir einen Kundendatensatz mit einer POST-Anfrage hinzu. Im folgenden Beispielbefehl fügen wir die Daten in den Text der HTTP-Anfrage ein.
curl -X POST -d 'id=10&customer_name=joe_bloggs' http://www.foobar.com/add_customer_record
In diesem Beispiel verweisen wir auf eine Datei, die die Daten zur Erstellung des Datensatzes enthält.
curl -X POST -d @customer_record.json -H "Content-Type: application/json" http://www.foobar.com/add_customer_record
Mit der folgenden PUT-Anfrage aktualisieren wir den Kundendatensatz.
curl -d 'id=10&client_name=jane_bloggs' -X PUT http://www.foobar.com/update_customer_record
Und im letzten Schritt entfernen wir den Kunden mit der Kunden-ID 22:
curl -X DELETE http://www.foobar.com/delete_customer_record?id=22
REST und CRUD im Vergleich: Gemeinsamkeiten und Unterschiede
Wie Sie sehen können, sind sich RESTful-API-Operationen und Datenbank-CRUD-Operationen trotz ihrer Unterschiede häufig sehr ähnlich:
Im oben erwähnten Beispiel einer Online-Reiseservice-App initiiert eine Webanwendung die CRUD-Operationen Create, Read, Update und Delete. Die Frontend-Website führt REST-API-Aufrufe aus, anschließend übersetzt der API-Code diese Anfragen in Datenbank-CRUD-Befehle und leitet sie an den Datenbanktreiber weiter. Sobald der Datenbanktreiber eine Antwort sendet (erfolgreich oder nicht erfolgreich), übersetzt der API-Code diese in eine HTTP-Antwort und schickt sie an den Client.
Eine Antwort an die anfragende Partei wird sowohl bei REST als auch bei CRUD gesendet. Für REST-API-Clients erfolgt dies in Form einer Standard-HTTP-Antwort (z. B. 200 OK
, 404 Resource Not Found
, 500 Internal Server Error
). Bei CRUD hat jedes Datenbank-Modul eigene Antwortcodes für Erfolg, Fehler oder Warnung.
Sehen wir uns nun die Unterschiede an.
Wir haben bereits erläutert, wie REST und CRUD in verschiedenen Teilen eines Anwendungspakets funktionieren. REST-APIs erhalten ihre Nutzdaten über das HTTP-Protokoll, während CRUD das jeweilige Protokoll der Datenbank verwendet. Auch die Netzwerkpakete haben eine unterschiedliche Struktur. In der Regel akzeptieren REST-APIs Client-Anfragen über Port 80
oder 443
. Dies lässt sich jedoch individuell konfigurieren. Bei CRUD-Operationen wird der Port über die Konfiguration des Datenbankservers festgelegt. Der Standardport für SQL Server ist beispielsweise Port 1433
.
CRUD-Funktionen können auch im Code der REST-API existieren. REST-APIs sind jedoch nicht nur auf den Aufruf von CRUD-Operationen beschränkt, sondern können auch andere Funktionen, Subroutinen und sogar andere APIs ausführen.
Es gibt zwar zahlreiche öffentliche und private REST-APIs, doch nur eine begrenzte Anzahl von Datenbank-Modulen (z. B. RDBMS, NoSQL und In-Memory-Datenbanken) ist heute verfügbar.
Vollständige Protokollierung und Einblicke – kostenlos
Falcon LogScale Community Edition (ehemals Humio) ist eine kostenlose moderne Log-Management-Plattform für die Cloud. Durch die Erfassung von Streaming-Daten erhalten Sie einen sofortigen Überblick über verteilte Systeme und können Zwischenfälle verhindern bzw. beheben.
Falcon LogScale Community Edition ist sofort kostenlos verfügbar und bietet folgende Vorteile:
- Erfassung von bis zu 16 GB pro Tag
- Speicherung bis zu 7 Tage
- Keine Kreditkarte erforderlich
- Unbegrenzter Zugriff ohne Testzeitraum
- Indexlose Protokollierung, Echtzeit-Warnungen und Live-Dashboards
- Zugriff auf unseren Marktplatz und zugehörige Pakete, einschließlich Leitfäden zur Entwicklung neuer Pakete
- Lernen und Kooperation in einer aktiven Gemeinschaft