Su lenguaje, "Es parece muy derrochador ...", para mí indica un intento de optimización prematura. A menos que se pueda demostrar que el envío de toda la representación de objetos es un gran golpe de rendimiento (estamos hablando de inaceptable para los usuarios como> 150ms), entonces no tiene sentido intentar crear un nuevo comportamiento de API no estándar. Recuerde, cuanto más simple es la API, más fácil es de usar.
Para eliminar envíe lo siguiente, ya que el servidor no necesita saber nada sobre el estado del objeto antes de que se produzca la eliminación.
DELETE /emails
POSTDATA: [{id:1},{id:2}]
El siguiente pensamiento es que si una aplicación se está ejecutando en problemas de rendimiento con respecto a la actualización masiva de objetos y luego en consideración rompiendo cada objeto en múltiples objetos se debe dar. De esta forma, la carga útil de JSON es una fracción del tamaño.
A modo de ejemplo al enviar una respuesta a actualizar el "leer" y "archivados" Estados de dos correos electrónicos separados que tendrían que enviar el siguiente:
PUT /emails
POSTDATA: [
{
id:1,
to:"[email protected]",
from:"[email protected]",
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:"[email protected]",
from:"[email protected]",
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"]
}
]
sin dividir los componentes mutables de la correo electrónico (leer, archivar, importancia, etiquetas) en un objeto separado ya que los otros (a, de, sujeto, texto) nunca se actualizarían.
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"]}
]
Otro enfoque a seguir es aprovechar el uso de un PATCH. Para indicar explícitamente qué propiedades tiene la intención de actualizar y que todas las demás deben ignorarse.
PATCH /emails
POSTDATA: [
{
id:1,
read:true,
archived:true
},
{
id:2,
read:true,
archived:false
}
]
personas declaran que parche debe ser implementada proporcionando una serie de cambios que contienen: acción (CRUD), trayectoria (URL), y el cambio de valor. Esto se puede considerar como una implementación estándar, pero si observa la totalidad de una API REST no es una intuición única. Además, la implementación anterior es cómo GitHub has implemented PATCH.
Para resumir, es posible adherirse a los principios RESTful con acciones por lotes y aún así tener un rendimiento aceptable.
Gracias. Eso es muy similar a mis ideas sobre cómo avanzaría si mantuviéramos las operaciones por lotes en el cliente. El problema es el tiempo de ida y vuelta para realizar una operación en una gran cantidad de objetos. –
Hm, está bien - Pensé que quería realizar la operación en una gran cantidad de objetos (en el servidor) mediante una solicitud de poco peso. ¿Lo entendí mal? –
Sí, pero no veo cómo esa muestra de código podría realizar la operación de manera más eficiente. Encabeza las solicitudes, pero todavía las envía al servidor de a una por vez. ¿Estoy malinterpretando? –