Aktionen vs. CRUD in REST

8

Ist es angemessen, mit REST andere Aktionen als das einfache Erstellen (POST), Lesen (GET), Aktualisieren (PUT) und Löschen (DELETE) durchzuführen? Ich bin irgendwie neu in der ganzen RESTful Theologie, also ertragen Sie mit mir, aber wie soll ich folgendes erreichen:

  • Ich habe einen Webdienst, der mit einem anderen Webdienst kommunizieren muss. Web-Service A muss ein Objekt im Web-Service B "reservieren". Dieses Objekt hat eine Gültigkeitsdauer, kann aber bei Bedarf sofort gelöscht werden. Es ist im Wesentlichen ein verherrlichtes Berechtigungssystem, das Webdienste benötigt, um einen Speicherplatz auf dem Webservice B zu reservieren, bevor irgendwelche Aktionen ausgeführt werden.

Mein erster Gedanke war, 1. die Authentifizierung irgendeiner Art zu aktivieren, 2. in der serverseitigen Antwort auf einen GET-Aufruf den Platz zu reservieren und das Ergebnis zurückzugeben und 3. eine sofortige "Unerhaltung" des Objekts über einen DELETE-Aufruf bereitzustellen . Wird das immer noch RESTful?

    
Naftuli Kay 13.07.2011, 21:56
quelle

3 Antworten

3

Ja, es ist in Ordnung, Aktionen mit Ruhe auszuführen. Es kommt darauf an, dass diese Aktionen von den Repräsentationen geleitet werden, die Sie austauschen.

Wenn Sie über die Funktionsweise des Webs (über einen Browser) nachdenken, tun Sie dies ständig: Sie erhalten ein HTML-Formular, mit dem Sie eine Reihe von Aktionen auswählen können, die Sie ausführen können. Dann senden Sie das Formular (in der Regel über POST ) und die Aktion wird ausgeführt.

Es ist gut, DELETE über einen programmgesteuerten Client verwenden zu können (was von Nicht-AJAX-Anfragen in Browsern nicht unterstützt wird), aber der Gesamtansatz eines REST-basierten Systems sollte dem, was Sie finden, sehr ähnlich sein für Websites (dh der Schwerpunkt sollte auf den Darstellungen liegen: das Äquivalent von Webseiten in Ihrem System).

GET sollte keine Nebenwirkungen haben. Verwenden Sie daher nicht GET , um die Reservierung selbst zu erstellen, sondern stattdessen etwas wie POST .

    
Bruno 13.07.2011, 22:07
quelle
2

Nein - unwahrscheinlich, erholsam zu sein

Aus Ihrer Beschreibung ...

2. In der serverseitigen Antwort auf einen GET-Aufruf reservieren Sie das Leerzeichen und geben das Ergebnis zurück

GETs sollten idempotent sein. Aus diesem Grund ist Ihr Service wahrscheinlich nicht erholsam, da der Zustand des Systems nach dem ersten GET anders ist.

Sie müssen wirklich berücksichtigen, dass eine Reservierung eine Ressource ist und mit einem POST in einem Reservierungscontainer erstellt werden sollte, der den URI der neuen Ressource im Location-Header der HTTP-Antwort zurückgibt. Diese UrI kann von Get verwendet werden, um die Ressource zurückzugeben und mit einem PUT aktualisiert zu werden

Beitrag sollte verwendet werden, um eine vorhandene Ressource zu erweitern und Put, um den Status einer Ressource zu ersetzen. In Ihrem Fall sollte die Post eine Liste von Reservierungen aktualisieren und den URI des neuen Inhalts zurückgeben Ressource (nicht nur die ich). Put kann verwendet werden, um den Status zu ändern, der mit der von der UR identifizierten Ressource verknüpft ist.

    
Chris McCauley 13.07.2011 22:15
quelle
1

Sie sind auf dem richtigen Weg, aber Ihre Reservierung des Objekts sollte mit einem PUT sein; Sie fügen eine Reservierung für das Objekt ein, d. h. ändern Sie das zugrunde liegende Objekt.

PUT ist das richtige Verb hier, da Sie wissen, welche Ressource Sie ändern, und sie sollte für mehrere Anfragen idempotent sein.

    
Paul Sonier 13.07.2011 22:08
quelle

Tags und Links