Wie implementieren Sie Ressourcenbearbeitungsformulare auf RESTful-Weise?

StackOverflow https://stackoverflow.com/questions/46004

  •  09-06-2019
  •  | 
  •  

Frage

Wir versuchen, eine REST-API für eine Anwendung zu implementieren, die wir jetzt haben.Wir möchten mithilfe der REST-API Lese-/Schreibfunktionen für verschiedene Ressourcen verfügbar machen.Wie implementieren wir den „Formular“-Teil davon?Ich erfahre, wie ich das „Lesen“ unserer Daten offenlegen kann, indem ich RESTful-URLs erstelle, die im Wesentlichen als Methodenaufrufe fungieren und die Daten zurückgeben:

GET /restapi/myobject?param=object-id-maybe

...und es wird ein XML-Dokument zurückgegeben, das eine Datenstruktur darstellt.Bußgeld.

Aber normalerweise würde eine „Bearbeitung“ in einer Webanwendung zwei Anfragen umfassen:eine zum Laden der aktuellen Version der Ressourcen und zum Füllen des Formulars mit diesen Daten und eine zum Zurücksenden der geänderten Daten.

Aber ich verstehe nicht, wie Sie dasselbe mit HTTP-Methoden tun würden, denen REST irgendwie zugeordnet ist.Es ist ein PUT, oder?Kann das jemand erklären?

(Zusätzliche Überlegung:Die Benutzeroberfläche würde hauptsächlich mit AJAX erstellt werden)

-- Aktualisieren:Das hilft auf jeden Fall.Aber was die Serverseite betrifft, bin ich immer noch etwas verwirrt?Natürlich geht es mir hier nicht nur um Dateien.Auf dem Server sollte der Code, der die Anfragen beantwortet, die Anfragemethode filtern, um zu bestimmen, was damit geschehen soll?Ist das der „Schalter“ zwischen Lese- und Schreibvorgängen?

War es hilfreich?

Lösung

Wenn Sie die Daten über einfaches HTML übermitteln, können Sie nur ein POST-basiertes Formular erstellen.Der URI, an den die POST-Anfrage gesendet wird sollte nicht sei der URI für die Ressource, die geändert wird.Sie sollten entweder einen POST an eine Sammlungsressource senden, die jedes Mal eine neu erstellte Ressource hinzufügt (mit dem URI für die neue Ressource im Standort Kopfzeile und a 202 Statuscode) oder POST an eine Updater-Ressource, die eine Ressource mit einem bereitgestellten URI im Inhalt der Anforderung (oder im benutzerdefinierten Header) aktualisiert.

Wenn Sie ein XmlHttpRequest-Objekt verwenden, können Sie die Methode auf PUT festlegen und die Daten an den URI der Ressource senden.Dies kann auch mit leeren Formularen funktionieren, wenn der Server einen gültigen URI für die noch nicht vorhandene Ressource bereitstellt.Der erste PUT würde die Ressource erstellen (zurückgeben). 202).Nachfolgende PUTs bewirken entweder nichts, wenn es sich um dieselben Daten handelt, oder sie ändern die vorhandene Ressource (in beiden Fällen a 200 wird zurückgegeben, es sei denn, es tritt ein Fehler auf).

Andere Tipps

Es gibt viele verschiedene Alternativen, die Sie nutzen können.Eine gute Lösung finden Sie hier Mikroformate-Wiki und wurde auch von der RESTful JSON-Crew referenziert.Eigentlich so nah wie möglich an einen Standard herankommen.

 Operate on a Record

GET /people/1
    return the first record 
DELETE /people/1
    destroy the first record 
POST /people/1?_method=DELETE
    alias for DELETE, to compensate for browser limitations 

GET /people/1/edit
    return a form to edit the first record 
PUT /people/1
    submit fields for updating the first record 
POST /people/1?_method=PUT
    alias for PUT, to compensate for browser limitations 

Ich denke, Sie müssen Datendienste von der Web-Benutzeroberfläche trennen.Bei der Bereitstellung von Datendiensten ist ein RESTful-System völlig angemessen, einschließlich der Verwendung von Verben, die Browser nicht unterstützen können (wie PUT und DELETE).

Bei der Beschreibung einer Benutzeroberfläche verwechseln die meisten Leute meiner Meinung nach „RESTful“ mit „schönen, vorhersehbaren URLs“.Ich würde mir bei der Beschreibung der Web-Benutzeroberfläche keine allzu großen Sorgen über eine rein RESTful-URL-Syntax machen.

Das Laden sollte nur eine normale GET-Anfrage sein und das Speichern neuer Daten sollte ein POST an die URL sein, die derzeit die Daten enthält ...

Laden Sie beispielsweise die aktuellen Daten von http://www.example.com/record/matt-s-example Ändern Sie dann die Daten und posten Sie sie mit den neuen Daten an dieselbe URL zurück.

Eine PUT-Anfrage könnte beim Erstellen eines neuen Datensatzes verwendet werden (d. h.Geben Sie die Daten unter eine URL ein, die derzeit nicht existiert), aber in der Praxis ist das bloße Posten wahrscheinlich ein besserer Ansatz für den Anfang.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top