2011-02-10 22 views
6

¿Es posible? ¿Las personas que diseñaron REST simplemente piensan que eliminarán las cosas de a una por siempre?RESTO - Eliminar una colección de objetos

Así que vamos a decir que tengo 10 Identificación de Foo 1-10

quiero borrar de ID 3, 6, y 9 con una sola HTTP DELETE llamada.

¿Hay alguna que pueda hacer esto sin ofender al Papa?

Respuesta

-1

Si usted está preocupado por ofender al Papa, tal vez usted debe pasar algún tiempo leyendo las escrituras :-) http://tools.ietf.org/html/draft-gregorio-uritemplate-04

Creo que todas sus preguntas serán contestadas en ese país.

+3

¿Podría indicar el lugar exacto en el documento antes mencionado respondiendo la pregunta del OP? – mark

+0

@mark Busque todas las muestras de expansión que usan la variable de ejemplo 'list'. Hay muchas formas de expandir múltiples valores en una plantilla URI. http://tools.ietf.org/html/rfc6570 –

+0

@DarrelMiller por lo que los pares de teclas delimitados por comas en el estilo de campo de formulario? ¿Debe eliminarse la eliminación en transacciones con dos tipos de estado: éxito, falla? (es decir, sin éxito parcial) –

0

No creo que sea un problema.

ELIMINAR http://www.example.com/foos significa eliminar todo.

BORRAR http://www.example.com/foos {3,6,9} significa eliminar foo 3, 6, 9.

+1

¿Están esos paréntesis {#, #, #} parte del estándar? Nunca había visto eso antes. –

+0

Es solo parte URI normal. Cualquier colección de recursos y recursos se puede representar con URI, puede proporcionar semántica al URI. – Dagang

+2

@Todd los datos adicionales en el URI parecen desordenados, ¿no preferiría enviar los datos para lo que realmente eliminar dentro del cuerpo de la solicitud? Esto es lo que estoy considerando fuertemente para un sistema donde el caso de uso predeterminado será múltiples eliminaciones. También tengo la intención de hacer simplemente llamar 'DELETE/foos' sin un cuerpo y una acción' inválida '. – thecoshman

5

mayoría de las API Estoy familiarizado con no permitir el borrado de varias entidades a la vez, pero para llevar a cabo otras operaciones en entidades múltiples con parámetros de URL como ?id=3,6,9 o ? id=3&id=6&id=9. Por lo que sería bastante común para hacer cualquiera de las siguientes:

DELETE /foos?id=3,6,9 

o

DELETE /foos?id=3&id=6&id=9 
+1

Solo tenga en cuenta que tal llamada no invalidará copias en caché de '/ foo/3','/foo/6' y '/ foo/9'. – fumanchu

+1

@fumanchu Pero correspondería al cliente saber eso. Además, a menos que el cliente elimine los elementos de forma individual, es decir, si utilizaron algunos para el recurso de recopilación, los recursos individuales tendrían caches obsoletos. Pero, los cachés obsoletos son simplemente parte de la web. – thecoshman

+0

También diría que puede enviar una carga útil en el cuerpo de la solicitud de eliminación que se puede usar para detallar exactamente qué eliminar. – thecoshman

Cuestiones relacionadas