Tidak ada alasan bahwa Anda juga tidak dapat melakukannya; atau keduanya.
Dalam konteks titik penjualan, melacak transaksi individu sangat masuk akal. Di sana, solusi Robert sangat masuk akal.
Dalam konteks stok / gudang, Anda tidak perlu melacak transaksi sebanyak "mengambil inventaris"; memiliki titik akhir yang memungkinkan klien untuk melaporkan tingkat stok mereka
Saya punya 10 unit. Saya punya 7 unit. Saya punya 3 unit. Saya punya 20 unit
sangat masuk akal.
Tingkat stok berubah karena alasan selain "penjualan"; hanya sesuatu yang perlu diingat.
Secara teori, level stok harus dapat dihitung dari perubahan; tetapi dalam beberapa domain itulah asumsi yang ingin Anda verifikasi . Anda ingin dapat menghitung tingkat stok dengan dua cara berbeda dan memeriksa perbedaan (alias "penyusutan").
Jadi saya tidak berpikir semantiknya jelas, berdasarkan konteks yang Anda berikan.
Adapun bagian HTTP; PUT [target-uri]
masuk akal secara semantik ketika Anda mengganti satu representasi dokumen dengan yang lain. Ini adalah UPSERT
- PUT kedua untuk sumber daya meminta untuk menimpa representasi yang ada.
PUT /sales { Quantity = 5 }
PUT /sales { Quantity = 2 }
PUT /sales { Quantity = 3 }
mengatakan bahwa jumlah unit yang terjual adalah 3
, bukan 10
.
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
10
Seperti itulah bentuknya
PUT /sales { Quantity : [5] }
PUT /sales { Quantity : [5,2] }
PUT /sales { Quantity : [5,2,3] }
Itu cara lain untuk mengeja 10
.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
Sejauh menyangkut HTTP, ini juga dapat diterima. Namun, ini bukan pilihan tepat pada jaringan yang tidak dapat diandalkan karena pesan terkadang digandakan.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
POST /sales { Quantity = 3 }
Apakah itu 13
? atau 10
?
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/3 { Quantity = 3 }
Itu jelas 10
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3] }
Itu jelas 10
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/4 { Quantity = 3 }
Itu jelas 13
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3,3] }
Itu jelas 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
(Agar adil, HTTP memang memiliki dukungan untuk permintaan bersyarat ; Anda dapat mengangkat beberapa metadata dari protokol khusus domain Anda ke header agnostik domain untuk menghilangkan beberapa ambiguitas - jika Anda dapat membujuk klien untuk bermain bersama).
Tentu saja, ada trade off - HTML tidak memiliki dukungan PUT asli; jika Anda bermaksud agar klien API Anda menjadi browser, maka Anda memerlukan protokol berdasarkan POST atau Anda memerlukan ekstensi kode-sesuai-permintaan untuk mengonversi pengiriman formulir dari POST ke PUT.