Denken Sie daran, dass bei einer REST-API alles eine Frage Ihrer Sichtweise ist.
Die beiden Schlüsselkonzepte in einer REST-API sind die Endpunkte und die Ressourcen (Entitäten). Ein Endpunkt gibt entweder Ressourcen über GET zurück oder akzeptiert Ressourcen über POST und PUT usw. (oder eine Kombination der oben genannten).
Es wird davon ausgegangen, dass mit POST die von Ihnen gesendeten Daten möglicherweise zur Erstellung einer neuen Ressource und der zugehörigen Endpunkte führen, die höchstwahrscheinlich nicht unter der POST-URL "leben". Mit anderen Worten, wenn Sie POSTEN, senden Sie Daten zur Bearbeitung an einen Ort. Auf dem POST-Endpunkt befindet sich die Ressource normalerweise nicht.
Zitat aus RFC 2616 (wobei irrelevante Teile weggelassen und relevante Teile hervorgehoben werden):
9.5 POST
Die POST-Methode wird verwendet, um anzufordern, dass der Ursprungsserver die in der Anforderung enthaltene Entität als neuen Untergebenen der Ressource akzeptiert, die durch den Anforderungs-URI in der Anforderungszeile identifiziert wird. POST wurde entwickelt, um eine einheitliche Methode zu ermöglichen, die die folgenden Funktionen abdeckt:
- ...
- Bereitstellen eines Datenblocks, z. B. des Ergebnisses des Absendens eines Formulars, für einen Datenverarbeitungsprozess;
- ...
...
Die von der POST-Methode ausgeführte Aktion führt möglicherweise nicht zu einer Ressource, die durch einen URI identifiziert werden kann . In diesem Fall ist entweder 200 (OK) oder 204 (kein Inhalt) der geeignete Antwortstatus, je nachdem, ob die Antwort eine Entität enthält, die das Ergebnis beschreibt oder nicht .
Wenn eine Ressource auf dem Ursprungsserver erstellt wurde, sollte die Antwort 201 (Erstellt) sein ...
Wir haben uns an Endpunkte und Ressourcen gewöhnt, die "Dinge" oder "Daten" darstellen, sei es ein Benutzer, eine Nachricht, ein Buch - was auch immer die Problemdomäne vorschreibt. Ein Endpunkt kann jedoch auch eine andere Ressource verfügbar machen - beispielsweise Suchergebnisse.
Betrachten Sie das folgende Beispiel:
GET /books?author=AUTHOR
POST /books
PUT /books/ID
DELETE /books/ID
Dies ist ein typischer REST CRUD. Was aber, wenn wir hinzufügen:
POST /books/search
{
"keywords": "...",
"yearRange": {"from": 1945, "to": 2003},
"genre": "..."
}
An diesem Endpunkt ist nichts Unruhiges. Es akzeptiert Daten (Entitäten) in Form des Anforderungshauptteils. Diese Daten sind die Suchkriterien - ein DTO wie jedes andere. Dieser Endpunkt erzeugt eine Ressource (Entität) als Antwort auf die Anforderung: Suchergebnisse . Die Suchergebnisressource ist eine temporäre Ressource, die dem Client sofort ohne Weiterleitung und ohne Offenlegung durch eine andere kanonische URL bereitgestellt wird.
Es ist immer noch REST, außer dass die Entitäten keine Bücher sind - die Anforderungsentität sind Buchsuchkriterien und die Antwortentität sind Buchsuchergebnisse.