Ihre Sprache "Es scheint sehr verschwenderisch ..." deutet auf einen Versuch einer vorzeitigen Optimierung hin. Wenn nicht gezeigt werden kann, dass das Senden der gesamten Darstellung von Objekten einen großen Leistungseinbruch darstellt (wir sprechen von Benutzern als> 150 ms inakzeptabel), macht es keinen Sinn, ein neues nicht standardmäßiges API-Verhalten zu erstellen. Denken Sie daran, je einfacher die API ist, desto einfacher ist ihre Verwendung.
Senden Sie zum Löschen Folgendes, da der Server vor dem Löschen nichts über den Status des Objekts wissen muss.
DELETE /emails
POSTDATA: [{id:1},{id:2}]
Der nächste Gedanke ist, dass, wenn bei einer Anwendung Leistungsprobleme in Bezug auf die Massenaktualisierung von Objekten auftreten, überlegt werden sollte, jedes Objekt in mehrere Objekte aufzuteilen. Auf diese Weise ist die JSON-Nutzlast ein Bruchteil der Größe.
Wenn Sie beispielsweise eine Antwort senden, um den Status "Lesen" und "Archiviert" von zwei separaten E-Mails zu aktualisieren, müssen Sie Folgendes senden:
PUT /emails
POSTDATA: [
{
id:1,
to:"someone@bratwurst.com",
from:"someguy@frommyville.com",
subject:"Try this recipe!",
text:"1LB Pork Sausage, 1 Onion, 1T Black Pepper, 1t Salt, 1t Mustard Powder",
read:true,
archived:true,
importance:2,
labels:["Someone","Mustard"]
},
{
id:2,
to:"someone@bratwurst.com",
from:"someguy@frommyville.com",
subject:"Try this recipe (With Fix)",
text:"1LB Pork Sausage, 1 Onion, 1T Black Pepper, 1t Salt, 1T Mustard Powder, 1t Garlic Powder",
read:true,
archived:false,
importance:1,
labels:["Someone","Mustard"]
}
]
Ich würde die veränderlichen Komponenten der E-Mail (Lesen, Archivieren, Wichtigkeit, Beschriftungen) in ein separates Objekt aufteilen, da die anderen (zu, von, Betreff, Text) niemals aktualisiert würden.
PUT /email-statuses
POSTDATA: [
{id:15,read:true,archived:true,importance:2,labels:["Someone","Mustard"]},
{id:27,read:true,archived:false,importance:1,labels:["Someone","Mustard"]}
]
Ein weiterer Ansatz besteht darin, die Verwendung eines PATCH zu nutzen. Um explizit anzugeben, welche Eigenschaften Sie aktualisieren möchten und dass alle anderen ignoriert werden sollen.
PATCH /emails
POSTDATA: [
{
id:1,
read:true,
archived:true
},
{
id:2,
read:true,
archived:false
}
]
Die Benutzer geben an, dass PATCH implementiert werden soll, indem eine Reihe von Änderungen bereitgestellt werden, die Folgendes enthalten: Aktion (CRUD), Pfad (URL) und Wertänderung. Dies kann als Standardimplementierung betrachtet werden. Wenn Sie sich jedoch die Gesamtheit einer REST-API ansehen, handelt es sich um eine nicht intuitive Einzelimplementierung. Mit der obigen Implementierung hat GitHub PATCH implementiert .
Zusammenfassend lässt sich sagen, dass es möglich ist, RESTful-Prinzipien mit Batch-Aktionen einzuhalten und dennoch eine akzeptable Leistung zu erzielen.