REST: Aktualisierung mehrere Datensätze
Muss ich aktualisieren Sie mehrere Datensätze mit einer einzigen HTTP-Anforderung. Ein Beispiel ist die Auswahl einer Liste von E-Mails und markiert Sie als Ungelesen. Was ist die beste (Restful) Weg, dies zu erreichen?
Den Weg, den ich gerade machst ist, durch die Verwendung eines sub-Ressource-Aktion
PUT http://example.com/api/emails/mark-as-unread
(im Körper)
{ids:[1,2,3....]}
- Wenn Sie nicht dieses "update all" Funktion für etwas anderes, das ich denke, dies ist eine gute option, aber wenn Sie es verwenden, dann erstellen Sie eine andere route für die Aktualisierung von ids, das ist, wie ich es tun würde.
- Meinst du so etwas wie
http://example.com/api/emails/bulk-update
und dann übergeben Sie ein array von Objekten? - Ja sowas in der Art, wählen Sie die route, die beschreibt Ihre Funktion am besten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine Algorithmus-Endpunkt, wie
bulk-update
ist ein Algorithmus, der name, ein Substantiv. Es wird der name des Endpunkts in RUHE, ist die Liste der ids sind Argumente, die auf diesen Algorithmus. In der Regel Menschen senden, die Ihnen als URL-query-Argumente in derPOST
nennen wieDies ist sehr sicher, da der POST ist nicht idempotent, und Sie müssen nicht darum kümmern, irgendwelche Nebenwirkungen. Sie könnten anders entscheiden-und wenn Ihre bulk-update trägt die gesamten Zustand von solchen Objekten entscheiden Sie sich für
PUT
dann würden Sie haben, um den tatsächlichen Zustand in den Körper der http-Aufruf.
Ich würde es vorziehen, eine Reihe von einfachen algo wie
mark-unread?ids=1,2,3,4
eher als eine monolithischePUT
wie hilft es beim debugging, transparent in logs etcIch diese Seite Lesen - http://restful-api-design.readthedocs.io/en/latest/methods.html#actions - und es schlägt die Verwendung einer "Aktionen" sub-Sammlung. z.B.
POST http://example.com/api/emails/actions
(im Körper)
{"type":"mark-as-unread", "ids":[1,2,3....]}
Zitate aus der referenzierten Webseite:
Es ein wenig kompliziert zu bekommen Palette von Modellen in einer action-Methode als argument. Der einfachste Ansatz ist die form eines json-Strings vom client und VERÖFFENTLICHEN alle, die auf dem server (auf Ihre Aktion mehtod). Sie können beschließen, die folgenden Ansatz
Sagen Ihre E-Mail-Modell ist wie folgt:
Also Ihre action-Methode wird in der form:
Verwenden Json.NET zu helfen, mit der Serialisierung.
Auf dem client kann man den ajax-Aufruf wie folgt: