No hay razón para que tú tampoco puedas hacerlo; o ambos.
En un contexto de punto de venta, el seguimiento de transacciones individuales tiene mucho sentido. Allí, la solución de Robert tiene mucho sentido.
En un contexto de stock / almacén, no necesariamente realiza un seguimiento de las transacciones sino de "hacer un inventario"; Tener un punto final que permita al cliente informar sus niveles de existencias
Tengo 10 unidades Tengo 7 unidades Tengo 3 unidades Tengo 20 unidades
Tiene mucho sentido.
Los niveles de existencias cambian por otras razones que no sean "ventas"; Sólo algo para tener en cuenta.
En teoría, el nivel de existencias debería ser computable a partir de los cambios; pero en algunos dominios esa es precisamente la suposición que desea verificar . Desearía poder calcular el nivel de existencias de dos maneras diferentes y verificar las discrepancias (también conocido como "contracción").
Por lo tanto, no creo que la semántica sea clara, según el contexto que haya proporcionado.
En cuanto a la parte HTTP; PUT [target-uri]
tiene sentido semánticamente cuando reemplaza una representación de un documento con otra. Es un UPSERT
- el segundo PUT a un recurso está pidiendo sobrescribir la representación existente.
PUT /sales { Quantity = 5 }
PUT /sales { Quantity = 2 }
PUT /sales { Quantity = 3 }
dice que la cantidad de unidades vendidas es 3
, no 10
.
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
Eso es lo que 10
parece
PUT /sales { Quantity : [5] }
PUT /sales { Quantity : [5,2] }
PUT /sales { Quantity : [5,2,3] }
Esa es otra forma de deletrear 10
.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
En lo que respecta a HTTP, esto también es aceptable. Sin embargo, no es una gran opción en una red poco confiable porque los mensajes a veces se duplican.
POST /sales { Quantity = 5 }
POST /sales { Quantity = 2 }
POST /sales { Quantity = 3 }
POST /sales { Quantity = 3 }
Es eso 13
? o 10
?
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/3 { Quantity = 3 }
Eso es inequívocamente 10
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3] }
Eso es inequívocamente 10
PUT /sales/1 { Quantity = 5 }
PUT /sales/2 { Quantity = 2 }
PUT /sales/3 { Quantity = 3 }
PUT /sales/4 { Quantity = 3 }
Eso es sin ambigüedad 13
PUT /sales { Quantity : [5,2,3] }
PUT /sales { Quantity : [5,2,3,3] }
Eso es sin ambigüedad 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
(Para ser justos, HTTP tiene soporte para solicitudes condicionales ; puede levantar algunos de los metadatos de su protocolo específico de dominio a los encabezados agnósticos de dominio para eliminar parte de la ambigüedad, si puede persuadir al cliente para que siga adelante).
Por supuesto, hay compensaciones: HTML no tiene soporte PUT nativo; si tiene la intención de que los clientes de su API sean navegadores, entonces necesita un protocolo basado en POST o necesita extensiones de código a pedido para convertir el envío del formulario de POST a PUT.