Estoy trabajando en un programa de servidor de cliente pequeño para recopilar pedidos. Quiero hacer esto de una manera "REST (ful)".
Lo que quiero hacer es:
Recoja todas las líneas de pedido (producto y cantidad) y envíe el pedido completo al servidor
Por el momento veo dos opciones para hacer esto:
- Envíe cada línea de pedido al servidor: POST qty y product_id
En realidad no quiero hacer esto porque quiero limitar el número de solicitudes al servidor, así que la opción 2:
- Recoja todas las líneas de pedido y envíelas al servidor de una vez.
¿Cómo debo implementar la opción 2? Un par de ideas que tengo es: Envuelva todas las líneas de pedido en un objeto JSON y envíe esto al servidor o use una matriz para publicar las líneas de pedido.
¿Es una buena idea o una buena práctica implementar la opción 2? De ser así, ¿cómo debo hacerlo?
¿Qué es una buena práctica?
/api/book-group
,/api/book-collection
o algo similar.Aunque las operaciones masivas (p. Ej., Creación de lotes) son esenciales en muchos sistemas, el estilo de arquitectura RESTful no las aborda formalmente.
Descubrí que PUBLICAR una colección como sugirió básicamente funciona, pero surgen problemas cuando necesita informar fallas en respuesta a dicha solicitud. Tales problemas son peores cuando ocurren múltiples fallas por diferentes causas o cuando el servidor no admite transacciones. Mi sugerencia es que si no hay problemas de rendimiento, por ejemplo, cuando el proveedor de servicios está en la LAN (no WAN) o los datos son relativamente pequeños, vale la pena enviar 100 solicitudes POST al servidor. Que sea simple, comience con solicitudes separadas y si tiene un problema de rendimiento intente optimizar.
fuente
Facebook explica cómo hacer esto: https://developers.facebook.com/docs/graph-api/making-multiple-requests
fuente
Tu idea me parece válida. La implementación es una cuestión de su preferencia. Puede usar JSON o solo parámetros para esto (matriz "order_lines []") y hacer
Dado que va a crear más recursos a la vez en una sola acción (orden y sus líneas) es vital validar cada uno de ellos y guardarlos solo si todos pasan la validación, es decir. deberías hacerlo en una transacción.
fuente
Supongo que es mejor enviar solicitudes separadas dentro de una sola conexión . Por supuesto, su servidor web debería soportarlo
fuente
De hecho, he estado luchando con esto últimamente, y esto es en lo que estoy trabajando.
Si una POST que agrega múltiples recursos tiene éxito, devuelve un 200 OK (estaba considerando un 201, pero el usuario finalmente no aterriza en un recurso que fue creado) junto con una página que muestra todos los recursos que se agregaron, ya sea en lectura -solo moda o editable. Por ejemplo, un usuario puede seleccionar y PUBLICAR múltiples imágenes en una galería utilizando un formulario que comprende solo una entrada de archivo único. Si la solicitud POST tiene éxito en su totalidad, se le presenta al usuario un conjunto de formularios para cada representación de recurso de imagen creada que le permite especificar más detalles sobre cada uno (nombre, descripción, etc.).
En el caso de que uno o más recursos no se puedan crear, el controlador POST cancela todo el procesamiento y agrega cada mensaje de error individual a una matriz. Luego, se devuelve un Conflicto 419 y el usuario se enruta a una página de error Conflicto 419 que presenta el contenido de la matriz de errores, así como un camino de regreso al formulario que se envió.
fuente
No querrá enviar los encabezados HTTP para 100 líneas de pedido. Tampoco desea generar más solicitudes de las necesarias.
Envíe todo el pedido en un objeto JSON al servidor, a: servidor / pedido o servidor / pedido / nuevo. Devuelve algo que apunta a: server / order / order_id
También considere usar
CREATEPUT en lugar de POSTfuente