it-swarm-eu.dev

Unterschied zwischen REST und CRUD

Ich habe gelernt REST und es fühlt sich sehr nach CRUD an (nach dem, was ich über CRUD gelesen habe).

Ich weiß, dass sie unterschiedlich sind, und ich frage mich, ob ich sie nicht verstehe, wenn ich denke, dass sie ähnlich sind.

Ist es das REST ist eine "Obermenge" von CRUD? Tut es alles, was CRUD tut und mehr?

178
Jesse Black

Überraschenderweise sehe ich in den anderen Antworten nicht, was ich für den wirklichen Unterschied zwischen REST und CRUD halte: was jeder schafft.

CRUD bezeichnet die grundlegenden Vorgänge, die in einem Datenrepository ausgeführt werden müssen. Sie bearbeiten Datensätze oder Datenobjekte direkt. Abgesehen von diesen Operationen sind die Datensätze passive Entitäten. Normalerweise sind es nur Datenbanktabellen und Datensätze.

REST hingegen verarbeitet Ressourcendarstellungen, die jeweils durch eine URL gekennzeichnet sind. Dies sind normalerweise keine Datenobjekte, sondern komplexe Objektabstraktionen.

Eine Ressource kann beispielsweise ein Benutzerkommentar sein. Dies bedeutet nicht nur einen Datensatz in einer "Kommentar" -Tabelle, sondern auch seine Beziehungen zur "Benutzer" -Ressource, dem Beitrag, an den der Kommentar angehängt ist, möglicherweise einem weiteren Kommentar, auf den er antwortet.

Das Bearbeiten des Kommentars ist keine primitive Datenbankoperation, sondern kann erhebliche Nebenwirkungen haben, z. B. das Auslösen einer Warnung auf das Originalposter oder das Neuberechnen einiger spielerischer "Punkte" oder das Aktualisieren einiger "Follower-Streams".

Eine Ressourcendarstellung enthält auch Hypertext (überprüfen Sie das Prinzip HASSOAS ), damit der Designer Beziehungen zwischen Ressourcen ausdrücken oder REST leiten kann Client im Workflow einer Operation.

Kurz gesagt, CRUD ist eine festgelegte primitive Operation (hauptsächlich für Datenbanken und statische Datenspeicher), während REST ein API-Stil auf sehr hoher Ebene ist (hauptsächlich für Webdienste und andere "Live" -Systeme).

Der erste manipuliert Basisdaten, der andere interagiert mit einem komplexen System.

212
Javier

Erstens sind beide einfach gebräuchliche Initialen; Sie sind nichts, vor dem man Angst haben muss.

CRUD ist ein einfacher Begriff, der abgekürzt wurde, da er in vielen Anwendungen häufig vorkommt und es einfacher ist, [~ # ~] crud [~ # ~] zu sagen. Es beschreibt die 4 grundlegenden Vorgänge, die Sie für Daten (oder eine Ressource) ausführen können. Erstellen, Lesen, Aktualisieren, Löschen.

REST ist jedoch eine benannte Praxis (genau wie AJAX), keine Technologie an sich. Es fördert die Verwendung von Funktionen, die dem HTTP-Protokoll seit langem eigen sind, aber nur selten verwendet werden.

Wenn Sie eine URL (Uniform Resource Locator) haben und Ihren Browser über die Adresszeile darauf verweisen, senden Sie eine HTTP-Anfrage. Jede HTTP-Anforderung enthält Informationen, anhand derer der Server wissen kann, welche HTTP-Antwort an den Client zurückgesendet werden soll, der die Anforderung ausgegeben hat.

Jede Anfrage enthält eine URL, sodass der Server weiß, auf welche Ressource Sie zugreifen möchten, sie kann jedoch auch eine Methode enthalten. Eine Methode beschreibt, was tun mit dieser Ressource zu tun ist.

Dieses "Methoden" -Konzept wurde jedoch nicht sehr oft angewendet.

Normalerweise verlinken Benutzer nur über die GET-Methode auf Seiten und geben any Aktualisierungstypen (Löschungen, Einfügungen, Aktualisierungen) über die Methode POST aus.

Und aus diesem Grund konnten Sie eine Ressource (URL) nicht als echte Ressource an sich behandeln. Sie mussten separate URLs zum Löschen, Einfügen oder Aktualisieren derselben Ressource haben. Zum Beispiel:

http://...com/posts/create- POST request  -> Goes to posts.create() method in the server
http://...com/posts/1/show- GET request  -> Goes to posts.show(1) method in the server
http://...com/posts/1/delete - POST request  -> Goes to posts.delete(1) method in the server
http://...com/posts/1/edit- POST request  -> Goes to posts.edit(1) method in the server

Mit REST erstellen Sie Formulare, die intelligenter sind, weil sie neben POST andere HTTP-Methoden verwenden, und programmieren Ihren Server so, dass er zwischen Methoden unterscheiden kann, nicht nur URLs. Also zum Beispiel:

http://...com/posts - POST request  -> Goes to posts.create() method in the server
http://...com/posts/1 - GET request  -> Goes to posts.show(1) method in the server
http://...com/posts/1 - DELETE request  -> Goes to posts.delete(1) method in the server
http://...com/posts/1 - PUT request  -> Goes to posts.edit(1) method in the server

Denken Sie daran, dass eine einzelne URL eine einzelne Ressource beschreibt. Ein einzelner Beitrag ist eine einzelne Ressource. Mit REST behandeln Sie Ressourcen so, wie sie behandelt werden sollten. Sie teilen dem Server mit, welche Ressource Sie verarbeiten möchten und wie Sie damit umgehen sollen.

"RESTful Architecture" bietet viele weitere Funktionen, über die Sie bei Interesse in Wikipedia, anderen Artikeln oder Büchern lesen können. CRUD selbst hat dagegen nicht viel mehr zu bieten.

102
Yam Marcovic

REST steht für "Representational State Transfer", dh es geht darum, den Status einer Ressource in einem System zu kommunizieren und zu ändern.

REST ist ziemlich involviert, da die Theorie hinter REST darin besteht, Medien, Hypermedien und ein zugrunde liegendes Protokoll für die Verwaltung von Informationen auf einem Remote-System zu nutzen.

CRUD hingegen ist eine Mnemonik für die allgemeinen Vorgänge, die Sie für Daten in einer Datenbank benötigen: Create Retrieve Update Delete. Aber tiefer geht es wirklich nicht.

Das ist also die Antwort auf Ihre Frage, aber ich werde den häufigen Fehler erwähnen, den ich sehe, wenn REST und CRUD zusammen besprochen werden. Viele Entwickler möchten REST direkt CRUD zuordnen, da REST über HTTP GET PUT POST und DELETE bereitstellt, während CRUD CREATE RETRIEVE UPDATE DELETE bereitstellt . Es ist natürlich, die Verben REST direkt CRUD-Operationen zuordnen zu wollen.

HTTP verwendet jedoch den Stil "Erstellen oder Aktualisieren", während CRUD das Erstellen und Aktualisieren voneinander trennt. Das macht es unmöglich (!), Eine saubere, allgemeine Zuordnung zwischen den beiden (!)

GET und DELETE sind einfach ... GET === RETRIEVE und DELETE === DELETE.

Gemäß der HTTP-Spezifikation lautet PUT jedoch "Erstellen UND Aktualisieren":

  • Verwenden Sie PUT, um ein brandneues Objekt zu erstellen, wenn Sie alles darüber wissen, einschließlich seiner Kennung

  • Verwenden Sie PUT, um ein Objekt zu aktualisieren (normalerweise mit einer vollständigen Darstellung des Objekts).

POST ist das Verb "Verarbeiten" und wird als Verb "Anhängen" betrachtet:

  • Verwenden Sie POST, um ein neues Objekt an eine Sammlung anzuhängen, dh ein neues Objekt zu erstellen

  • POST wird auch verwendet, wenn keines der anderen Verben ganz passt, da die HTTP-Spezifikation es als das Verb "Datenverarbeitung" definiert

  • Wenn Ihr Team bei POST hängen bleibt, denken Sie daran, dass das gesamte WWW auf GET und POST aufgebaut wurde;)

Obwohl es eine Ähnlichkeit zwischen REST und CRUD gibt, besteht der Fehler, den die meisten Teams machen, darin, eine Äquivalenz zwischen beiden herzustellen. Ein Team muss wirklich vorsichtig sein, wenn es eine REST API definiert, um nicht zu sehr an der CRUD-Mnemonik hängen zu bleiben, da REST als Praxis wirklich eine Menge zusätzlicher Komplexität aufweist, die dies nicht tut. t ordentlich CRUD zuordnen.

22
Rob

GROB

  • CRUD besteht aus vier Grundtypen von SQL-Befehlen: Erstellen, Lesen, Aktualisieren und Löschen
  • Die meisten Anwendungen verfügen über eine CRUD-Funktionalität
  • Eine CRUD-Anwendung verwendet Formulare, um Daten in eine Datenbank und aus dieser heraus zu holen

REST

  • REST steht für Representational State Transfer. (Manchmal wird es "ReST" geschrieben.)

  • Es basiert auf einem zustandslosen, zwischenspeicherbaren Client-Server-Kommunikationsprotokoll - und in praktisch allen Fällen wird das HTTP-Protokoll verwendet

  • REST ist ein Architekturstil zum Entwerfen von Netzwerkanwendungen

7
Vayodya Tamari

CRUD gibt einen minimalen Satz grundlegender Speicherverben zum Lesen und Schreiben von Daten an: Erstellen, Lesen, Aktualisieren und Löschen. Anschließend können Sie andere Vorgänge erstellen, indem Sie diese aggregieren. Diese werden normalerweise als Datenbankoperationen betrachtet, aber was als Datenbank betrachtet wird, ist willkürlich (z. B. könnte ein relationales DBMS sein, könnte aber auch YAML-Dateien sein).

REST ist ein "Architekturstil", der normalerweise CRUD-Operationen und andere Operationen auf höherer Ebene umfasst, die alle mit einem Konzept von "Ressourcen" ausgeführt werden sollen (willkürlich, aber dies sind Entitäten in Ihrer Anwendung). REST hat eine Reihe von Einschränkungen , die es interessant machen (und besonders gut mit HTTP gepaart sind).

Eine REST - Schnittstelle kann, muss aber nicht alle CRUD-Operationen für eine bestimmte Ressource verfügbar machen. Was in einer REST - Schnittstelle verfügbar ist, ist willkürlich und kann beliebig sein Änderungen aufgrund von Systemberechtigungen, Überlegungen zur Benutzeroberfläche und der Hitze an dem Tag, an dem die Schnittstelle entworfen und erstellt wurde. Heißere Tage führen normalerweise zu minimalistischeren Schnittstellen, obwohl das Gegenteil der Fall sein kann.

7
Dan Rosenstark

REST ist so etwas wie eine Webseite für Maschinen, die sie durchsuchen können, während CRUD so etwas wie SOAP ist, das stark an seine Kunden gekoppelt ist. Dies sind die Hauptunterschiede. Ofc. Sie sind auf der Oberfläche ähnlich, aber CRUD beschreibt die grundlegende Manipulation von Entitäten, während REST die Schnittstelle einer beliebigen Anwendung beschreiben kann. Ein weiterer Unterschied, der REST kann mehr verwenden) 4 HTTP-Methoden. Es wäre eine sehr lange Antwort, wenn ich alle Unterschiede erfassen möchte. Wenn Sie die Fragen zu REST vs SOAP) überprüfen, werden Sie die meisten finden.

Ich denke, REST mit CRUD zu verwechseln ist ein sehr häufiger Fehler und die Ursache ist, dass Entwickler nicht die Zeit haben, über REST in der Tiefe zu lesen. Sie nur Ich möchte die Technologie verwenden - ohne sie zu verstehen - basierend auf begrenzten Beispielen im CRUD-Stil, die von ähnlichen Entwicklern geschrieben wurden. Die überwiegende Mehrheit der Beispiele und Tutorials spiegelt einen gravierenden Mangel an Wissen wider. Zuordnung REST Ressourcen zu Entitäten und HTTP-Methoden für CRUD-Operationen dieser Entitäten und die Verwendung von REST ohne Hyperlinks ist nur ein Symptom dafür. Mit REST ordnen Sie Hyperlinks zu (einschließlich Links mit POST /)))) PUT/DELETE/PATCH-Methoden) für Ihre Operationen und Sie identifizieren die Operation auf der Clientseite, indem Sie die (normalerweise API-spezifische) Verknüpfungsbeziehung überprüfen. Wenn ein REST-Client nicht weiß, was eine Verknüpfungsbeziehung ist ist und kennt nur die HTTP-Methoden und möglicherweise einige URI-Vorlagen, dann ist das kein REST Client, sondern ein CRUD auf HTTP-Client. Ein weiterer häufiger Fehler, dass ein REST Client ist eine einseitige Javascript-Anwendung, die im Browser ausgeführt wird. Natürlich können Sie einen solchen Client implementieren, aber REST war hauptsächlich für automatische Clients (serverseitige Anwendungen, die von Entwicklern geschrieben wurden, die Sie nicht einmal kennen) und nicht für manuelle Clients (benutzergesteuerte Browseranwendungen) gedacht geschrieben von Ihnen). Nur einen einzigen Browser-Client zu haben, könnte ein Zeichen dafür sein, dass Sie nicht wirklich benötigen REST und Sie haben das Projekt gerade überarbeitet. In diesen Fällen ist eine CRUD-API eine praktikable Lösung und Entwickler nennen diese CRUD-APIs REST, weil sie den Unterschied nicht kennen.

2
inf3rno