Ich habe REST gelernt 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 REST eine "Obermenge" von CRUD? Macht alles CRUD und mehr?
Antworten:
Ü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 Vorgängen sind die Datensätze passive Einheiten. Normalerweise handelt es sich nur um 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. Das bedeutet nicht nur einen Datensatz in einer 'Kommentar'-Tabelle, sondern auch die Beziehung zu der' Benutzer'-Ressource, dem Beitrag, an den der Kommentar angehängt ist, oder zu einem anderen Kommentar, auf den er reagiert.
Das Bearbeiten des Kommentars ist keine primitive Datenbankoperation, sondern kann erhebliche Nebenwirkungen haben, z. B. das Auslösen einer Warnung für das ursprüngliche Poster oder das Neuberechnen einiger spielähnlicher "Punkte" oder das Aktualisieren einiger "Follower-Streams".
Außerdem enthält eine Ressourcendarstellung Hypertext (überprüfen Sie das HATEOAS- Prinzip), sodass der Designer Beziehungen zwischen Ressourcen ausdrücken oder den REST-Client im Workflow einer Operation steuern kann.
Kurz gesagt, CRUD ist eine Menge primitiver Operationen (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.
quelle
Erstens sind beide einfach gemeinsame Initialen; Sie sind nichts, wovor man Angst haben muss.
Nun, CRUD ist ein einfacher Begriff, der abgekürzt wurde, weil er in vielen Anwendungen häufig vorkommt, und es ist einfacher, CRUD zu sagen . Es werden die 4 grundlegenden Vorgänge beschrieben, die Sie an Daten (oder einer Ressource) ausführen können. Erstellen, Lesen, Aktualisieren, Löschen.
REST ist jedoch eine benannte Praxis (genau wie AJAX), keine Technologie für sich. Es wird die Verwendung von Funktionen empfohlen, die dem HTTP-Protokoll seit langem eigen sind, jedoch 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 ermitteln kann, welche HTTP-Antwort an den Client zurückgesendet werden soll, der die Anforderung ausgegeben hat.
Jede Anforderung 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 mit dieser Ressource zu tun ist .
Aber dieses "Methoden" -Konzept wurde nicht sehr oft angewendet.
Normalerweise verlinken die Benutzer nur mit der GET-Methode auf Seiten und geben alle Arten von Aktualisierungen (Löschungen, Einfügungen, Aktualisierungen) mit der POST-Methode aus.
Aus diesem Grund können Sie eine Ressource (URL) nicht als echte Ressource behandeln. Zum Löschen, Einfügen oder Aktualisieren derselben Ressource mussten separate URLs vorhanden sein. Zum Beispiel:
Mit REST erstellen Sie intelligentere Formulare, da neben POST auch andere HTTP-Methoden verwendet werden, und programmieren Ihren Server so, dass nicht nur URLs, sondern auch Methoden unterschieden werden können . Also zum Beispiel:
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 sollen. Sie teilen dem Server mit, mit welcher Ressource und wie er umgehen soll.
Zu "RESTful architecture" gibt es viele weitere Funktionen, über die Sie bei Interesse in Wikipedia, anderen Artikeln oder Büchern nachlesen können. CRUD selbst hat nicht viel mehr zu bieten.
quelle
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 sehr 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 Kurzbezeichnung für die allgemeinen Vorgänge, die Sie für Daten in einer Datenbank benötigen: Erstellen Abrufen Aktualisieren Löschen. Aber tiefer geht es wirklich nicht.
Das ist also die Antwort auf Ihre Frage, aber ich erwähne den allgemeinen Fehler, 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 und CRUD CREATE RETRIEVE UPDATE DELETE ermöglicht. Es ist normal, die REST-Verben 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 "Create AND Update" (Erstellen und aktualisieren):
Verwenden Sie PUT, um ein brandneues Objekt zu erstellen, wenn Sie alles über es wissen, einschließlich seines Bezeichners
Verwenden Sie PUT, um ein Objekt zu aktualisieren (normalerweise mit einer vollständigen Darstellung des Objekts).
POST ist das "Verarbeiten" -Verb und wird als "Anhängen" -Verb betrachtet:
Mit POST können Sie ein neues Objekt an eine Sammlung anhängen, dh ein neues Objekt erstellen
POST wird auch verwendet, wenn keines der anderen Verben genau passt, da es in der HTTP-Spezifikation als "Datenverarbeitungsverb" definiert ist
Wenn Ihr Team auf POST nicht mehr reagiert, denken Sie daran, dass das gesamte WWW auf GET und POST basiert.
Während es also Ähnlichkeiten zwischen REST und CRUD gibt, sehe ich den Fehler, den die meisten Teams machen, darin, eine Äquivalenz zwischen den beiden zu erzielen. Ein Team muss wirklich vorsichtig sein, wenn es eine REST-API definiert, um nicht zu sehr in der CRUD-Mnemonik hängen zu bleiben, da REST als Praxis wirklich eine Menge zusätzlicher Komplexität aufweist, die CRUD nicht sauber zugeordnet werden kann.
quelle
CRUD spezifiziert einen minimalen Satz grundlegender Speicherverben zum Lesen und Schreiben von Daten: Erstellen, Lesen, Aktualisieren und Löschen. Anschließend können Sie andere Operationen erstellen, indem Sie diese aggregieren. Diese werden normalerweise als Datenbankoperationen betrachtet, aber was als Datenbank betrachtet wird, ist willkürlich (z. B. könnte es sich um ein relationales DBMS handeln, aber auch um YAML-Dateien).
REST ist ein "Architekturstil", der normalerweise CRUD-Operationen und andere Operationen auf höherer Ebene umfasst, die alle mit einem bestimmten Konzept von "Ressourcen" ausgeführt werden sollen (willkürlich, dies sind jedoch Entitäten in Ihrer Anwendung). REST weist eine Reihe von Einschränkungen auf , die es interessant machen (und besonders gut zu HTTP passen).
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 sich aufgrund von Systemberechtigungen, Überlegungen zur Benutzeroberfläche und der Hitze am Tag des Entwurfs und der Erstellung der Schnittstelle ändern. Heißere Tage führen in der Regel zu minimalistischeren Schnittstellen, obwohl das Gegenteil der Fall sein kann.
quelle
CRUD
SICH AUSRUHEN
REST steht für Representational State Transfer. (Es wird manchmal "ReST" geschrieben.)
Es basiert auf einem zustandslosen, zwischengespeicherten Client-Server-Kommunikationsprotokoll - und in praktisch allen Fällen wird das HTTP-Protokoll verwendet
REST ist ein Architekturstil zum Entwerfen von Netzwerkanwendungen
quelle
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. Das sind die Hauptunterschiede. Ofc. Sie sind äußerlich ähnlich, aber CRUD beschreibt die grundlegende Manipulation von Entitäten, während REST die Benutzeroberfläche jeder Anwendung beschreiben kann. Ein weiterer Unterschied, dass REST mehr als 4 HTTP-Methoden verwenden kann. Es wäre eine sehr lange Antwort, wenn ich alle Unterschiede zusammenfassen möchte. Wenn Sie die Fragen zu REST vs SOAP prü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, sich eingehend mit REST zu beschäftigen. Sie möchten die Technologie nur nutzen - ohne sie zu verstehen - basierend auf begrenzten CRUD-Stilbeispielen, die von ähnlichen Entwicklern geschrieben wurden. Die überwiegende Mehrheit der Beispiele und Tutorials spiegelt schwerwiegenden Wissensmangel wider. Die Zuordnung von REST-Ressourcen zu Entitäten und HTTP-Methoden zu CRUD-Operationen dieser Entitäten und die Verwendung von REST ohne Hyperlinks ist nur ein Symptom dafür. Mit REST ordnen Sie Ihren Operationen Hyperlinks (einschließlich Links mit den Methoden POST / PUT / DELETE / PATCH) zu und identifizieren die Operation auf der Clientseite, indem Sie die (normalerweise API-spezifische) Linkbeziehung überprüfen. Wenn ein REST-Client nicht weiß, was eine Verknüpfungsbeziehung ist, und nur die HTTP-Methoden und möglicherweise einige URI-Vorlagen kennt, dann ist das kein REST-Client, sondern ein CRUD-on-HTTP-Client. Ein weiterer häufiger Fehler ist, dass ein REST-Client eine JavaScript-Anwendung mit nur einer Seite ist, 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, die Sie geschrieben haben) gedacht. Ein einziger Browser-Client könnte ein Zeichen dafür sein, dass Sie REST nicht wirklich benötigen und das Projekt nur überarbeitet haben. In diesen Fällen ist eine CRUD-API eine praktikable Lösung, und Entwickler bezeichnen diese CRUD-APIs als REST, da sie den Unterschied nicht kennen. 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, die Sie geschrieben haben) gedacht. Ein einziger Browser-Client könnte ein Zeichen dafür sein, dass Sie REST nicht wirklich benötigen und das Projekt nur überarbeitet haben. In diesen Fällen ist eine CRUD-API eine praktikable Lösung, und Entwickler bezeichnen diese CRUD-APIs als REST, da sie den Unterschied nicht kennen. 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, die Sie geschrieben haben) gedacht. Ein einziger Browser-Client könnte ein Zeichen dafür sein, dass Sie REST nicht wirklich benötigen und das Projekt nur überarbeitet haben. In diesen Fällen ist eine CRUD-API eine praktikable Lösung, und Entwickler bezeichnen diese CRUD-APIs als REST, da sie den Unterschied nicht kennen.
quelle