Es gibt keinen Grund, warum Sie das auch nicht können. oder beides.
In einem Point-of-Sale-Kontext ist die Verfolgung einzelner Transaktionen sehr sinnvoll. Dort macht Roberts Lösung sehr viel Sinn.
In einem Lager- / Lagerkontext verfolgen Sie Transaktionen nicht unbedingt, sondern "Inventar". einen Endpunkt haben, über den der Kunde seine Lagerbestände melden kann
Ich habe 10 Einheiten Ich habe 7 Einheiten Ich habe 3 Einheiten Ich habe 20 Einheiten
macht sehr viel Sinn.
Die Lagerbestände ändern sich aus anderen Gründen als "Verkäufe". nur etwas zu beachten.
Theoretisch sollte der Lagerbestand aus den Änderungen berechenbar sein; In einigen Bereichen ist dies jedoch genau die Annahme, die Sie überprüfen möchten . Sie möchten in der Lage sein, den Lagerbestand auf zwei verschiedene Arten zu berechnen und auf Unstimmigkeiten zu prüfen (auch als "Schrumpfung" bezeichnet).
Daher denke ich nicht, dass die Semantik eindeutig ist, basierend auf dem von Ihnen angegebenen Kontext.
Wie für den HTTP-Teil; PUT [target-uri]
Semantisch sinnvoll, wenn Sie eine Darstellung eines Dokuments durch eine andere ersetzen. Es ist ein UPSERT
- der zweite PUT zu einer Ressource fordert zum Überschreiben der vorhandenen Darstellung auf.
PUT /sales { Quantity = 5 }
PUT /sales { Quantity = 2 }
PUT /sales { Quantity = 3 }
sagt, dass die Menge der verkauften Einheiten 3
nicht ist 10
.
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
So 10
sieht es aus
PUT /sales { Quantity : [5] }
PUT /sales { Quantity : [5,2] }
PUT /sales { Quantity : [5,2,3] }
Das ist eine andere Art der Rechtschreibung 10
.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
Dies ist auch für HTTP akzeptabel. In einem unzuverlässigen Netzwerk ist dies jedoch keine gute Wahl, da Nachrichten manchmal doppelt vorhanden sind.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
POST /sales { Quantity = 3 }
Ist das 13
? oder 10
?
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/3 { Quantity = 3 }
Das ist eindeutig 10
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3] }
Das ist eindeutig 10
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/4 { Quantity = 3 }
Das ist eindeutig 13
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3,3] }
Das ist eindeutig 13
POST /sales { TransactionId = 1 , Quantity = 5 }
POST /sales { TransactionId = 2 , Quantity = 2 }
POST /sales { TransactionId = 3 , Quantity = 3 }
POST /sales { TransactionId = 3 , Quantity = 3 }
10
POST /sales { TransactionId = 1 , Quantity = 5 }
POST /sales { TransactionId = 2 , Quantity = 2 }
POST /sales { TransactionId = 3 , Quantity = 3 }
POST /sales { TransactionId = 4 , Quantity = 3 }
13
(Um fair zu sein, HTTP unterstützt bedingte Anforderungen . Sie können einige der Metadaten aus Ihrem domänenspezifischen Protokoll in die domänenunabhängigen Header heben, um einige Unklarheiten zu beseitigen - wenn Sie den Client zum Mitspielen überreden können.)
Natürlich gibt es Kompromisse - HTML bietet keine native PUT-Unterstützung. Wenn Sie beabsichtigen, dass die Clients Ihrer API Browser sind, benötigen Sie entweder ein auf POST basierendes Protokoll oder Code-on-Demand-Erweiterungen, um die Formularübermittlung von einem POST in einen PUT zu konvertieren.