REST: Aktualisieren Sie Mehrere Ressourcen Mit Einer Anfrage - Ist es standard oder vermieden werden?
Einer einfachen REST-API:
- BEKOMMEN: Artikel/{id} - Gibt eine Beschreibung für das Element mit der angegebenen id
- : Artikel/{id} - Aktualisiert oder Erstellt das Element mit der angegebenen id
- LÖSCHEN: Artikel/{id} - Löscht das Element mit der angegebenen id
Nun die API-Erweiterung in Frage:
- HOLEN Sie sich: Gegenstände?filter - Gibt alle Element-ids, die den Filterkriterien entsprechen
- SETZEN: die Artikel - Updates oder erstellt einen Satz von Elementen, wie beschrieben, durch die JSON-Nutzlast
- [[LÖSCHEN: Artikel - löscht eine Liste von Elementen, beschrieben von JSON-Nutzlast]] <- Nicht Korrekt
Bin ich nun daran interessiert, das LÖSCHEN und SETZEN Betrieb-recycling-Funktionalität, die leicht zugänglich durch SETZEN/LÖSCHEN von Elementen/{id}.
Frage: Ist es üblich, eine API bieten so?
Alternative: Im Zeitalter der Einzigen Verbindung Mehrere Anfragen Erteilung mehrerer Aufträge ist Billig und würde mehr arbeiten, atomic, da ein ändern Sie entweder erfolgreich ist oder scheitert, aber im Zeitalter von NOSQL-Datenbank-eine änderung in der Liste werden möglicherweise schon passiert ist, auch wenn die request-Verarbeitung bricht mit einem internal server oder was auch immer aus welchen Gründen auch immer.
[UPDATE]
Nach Berücksichtigung White House-Web-Standards und Wikipedia: REST Beispiele die folgenden Beispiel-API ist jetzt vorgesetzt:
Einer einfachen REST-API:
- BEKOMMEN: Artikel/{id} - Gibt eine Beschreibung für das Element mit der angegebenen id
- : Artikel/{id} - Aktualisiert oder Erstellt das Element mit der angegebenen id
- LÖSCHEN: Artikel/{id} - Löscht das Element mit der angegebenen id
Top-Ressource-API:
- HOLEN Sie sich: Gegenstände?filter - Gibt alle Element-ids, die den Filterkriterien entsprechen
- POST: die Artikel - Updates oder erstellt einen Satz von Elementen, wie beschrieben, durch die JSON-Nutzlast
SETZEN und LÖSCHEN /Elemente werden nicht unterstützt und verboten.
POST scheint, den trick zu tun, als die eine zu erstellen neue Elemente in einer umschließenden Ressource, während der nicht zu ersetzen, sondern Anhängen.
Die HTTP-Semantik POST Liest:
Erweitern einer Datenbank durch eine Anfüge-operation
Wo die PUT-Methode erfordern würde, zu ersetzen, the complete collection, um wieder eine gleichwertige Darstellung wie zitiert Die HTTP-Semantik SETZEN:
Einer erfolgreichen SETZEN einer bestimmten Darstellung würde vorschlagen, dass ein Anschließendes GET auf die gleiche Ziel-Ressource wird durch eine gleichwertige Vertretung zurückgegeben wird in ein 200 (OK) Antwort.
[UPDATE2]
Alternative, die scheint noch konsequenter für das update Aspekt von mehreren Objekten zu sein scheint, die PATCH-Methode. Der Unterschied zwischen PUT-und PATCH beschrieben wird, in der Entwurf RFC 5789:
Den Unterschied zwischen PUT-und PATCH-Anforderungen spiegelt sich in der Art und Weise verarbeitet der server die geschlossene Entität zu ändern, die die Ressource identifiziert durch die Request-URI. In einer PUT-Anfrage die geschlossene Einheit ist als eine modifizierte version der Ressource, die gespeichert auf dem Ursprungs-server und der client anfordert, dass die gespeicherte version ersetzt werden. Mit PATCH, jedoch die geschlossene Entität enthält eine Reihe von Anweisungen, die beschreiben, wie eine Ressource, die derzeit mit Wohnsitz auf den Ursprung-server geändert werden sollte, um zu produzieren eine neue version. Die PATCH-Methode wirkt sich auf die Ressource identifiziert durch die Request-URI, und es KANN auch Nebenwirkungen auf andere Ressourcen; d.h., neue Ressourcen erstellt werden, oder bestehende geändert, durch die Anwendung eines PATCHES.
Also im Vergleich zu POST, PATCH kann auch eine bessere Idee, da PATCH ermöglicht es ein UPDATE, wo als die POST erlaubt nur anfügen, etwas Bedeutung hinzufügen, ohne die chance auf änderung.
Also die POST scheint hier falsch und müssen wir ändern die von uns vorgeschlagene API:
Einer einfachen REST-API:
- BEKOMMEN: Artikel/{id} - Gibt eine Beschreibung für das Element mit der angegebenen id
- : Artikel/{id} - Aktualisiert oder Erstellt das Element mit der angegebenen id
- LÖSCHEN: Artikel/{id} - Löscht das Element mit der angegebenen id
Top-Ressource-API:
- HOLEN Sie sich: Gegenstände?filter - Gibt alle Element-ids, die den Filterkriterien entsprechen
- POST: Artikel - Legt einen oder mehrere Artikel, wie beschrieben, durch die JSON-Nutzlast
- PATCH: Elemente Erstellt oder Aktualisiert eine oder mehrere Elemente, wie beschrieben, durch die JSON-Nutzlast
InformationsquelleAutor der Frage Martin Kersten | 2015-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie den PATCH-Sammlung, z.B.
Technisch PATCH-identifizieren würden, die den Datensatz in der URL (ie-PATCH
/items/1
und nicht in der request-body, aber das scheint wie eine gute pragmatische Lösung.Unterstützen, löschen, erstellen, und aktualisieren von in einem einzigen Aufruf, das ist nicht wirklich unterstützt standard-REST-Konventionen. Eine Möglichkeit ist eine spezielle "batch" - Dienst, mit dem Sie montieren ruft zusammen:
gibt eine Antwort mit dem status-codes für jede eingebettete Anfragen:
Nicht wirklich standard, aber ich habe es gemacht und es funktioniert.
InformationsquelleAutor der Antwort mahemoff
Soweit ich das verstanden habe, den REST Konzept deckt es ein update für mehrere Ressourcen mit einer Anfrage. Eigentlich ist der trick hier ist, um zu gehen von einem container, um die verschiedenen Ressourcen und nehmen Sie es als eine einzige Ressource. E. g. Sie konnte nur davon ausgehen, dass die Liste der IDs identifiziert eine Ressource, enthält verschiedene andere Ressourcen.
In diesen Beispiele in der Wikipedia Sie sprechen auch über Ressourcen im Plural.
InformationsquelleAutor der Antwort Kris