あなたもできない理由はありません。または両方。
POSのコンテキストでは、個々のトランザクションを追跡することは非常に理にかなっています。そこでは、ロバートのソリューションは非常に理にかなっています。
在庫/倉庫のコンテキストでは、「在庫を取る」ほどトランザクションを追跡する必要はありません。クライアントが在庫レベルを報告できるエンドポイントを持っている
10ユニット7ユニット3ユニット20ユニット
理にかなっています。
在庫レベルは「販売」以外の理由で変化します。心に留めておくべきことだけです。
理論的には、在庫レベルは変更から計算可能でなければなりません。しかし、一部のドメインでは、これは正確に確認したい前提です。在庫レベルを2つの異なる方法で計算し、不一致(別名「収縮」)をチェックできるようにする必要があります。
だから、あなたが提供した文脈に基づいて、セマンティクスが明確であるとは思いません。
HTTP部分については、PUT [target-uri]
ドキュメントのある表現を別の表現に置き換える場合、意味的に意味があります。それはだUPSERT
-リソースへの第二PUTは、既存の表現を上書きするように求めています。
PUT /sales { Quantity = 5 }
PUT /sales { Quantity = 2 }
PUT /sales { Quantity = 3 }
とは3
、販売数量はではなくであることを言い10
ます。
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
それ10
は次のようになります
PUT /sales { Quantity : [5] }
PUT /sales { Quantity : [5,2] }
PUT /sales { Quantity : [5,2,3] }
これは別のスペルの方法です10
。
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
HTTPに関する限り、これも許容されます。ただし、メッセージが複製されることがあるので、信頼性の低いネットワークではあまり適していません。
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
POST /sales { Quantity = 3 }
あれ13
?または10
?
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/3 { Quantity = 3 }
それは明白です 10
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3] }
それは明白です 10
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/4 { Quantity = 3 }
それは明白です 13
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3,3] }
それは明白です 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
(公平に言うと、HTTPは条件付きリクエストをサポートしています。ドメイン固有のプロトコルからドメインにとらわれないヘッダーにメタデータの一部を持ち上げて、あいまいさの一部を取り除くことができます-クライアントに一緒にプレイするように説得できる場合)。
もちろん、トレードオフがあります-HTMLはネイティブのPUTサポートを持っていません。APIのクライアントをブラウザーにする場合は、POSTに基づくプロトコルが必要か、フォーム送信をPOSTからPUTに変換するためのコードオンデマンド拡張が必要です。