Me gusta RESTful por su simplicidad y por la forma en que evita la falla de los sistemas 'empresariales' normales como SOAP, o la dureza binaria de DCOM y RPC.¿Acciones/servicios RESTful que no corresponden a una entidad?
Pero REST parece más adecuado para entidades de base de datos que para servicios más abstractos. Me preguntaba si podrías aconsejarme cómo harías estas situaciones:
Por ejemplo, supongamos que tengo un servicio web RESTful para un sistema de base de datos normal (por ejemplo, un sitio de compra de lácteos), así que tener/products/eggs/battery y/products/milk/skimmed
Hacer un INSERT se lograría haciendo un POST a/products/eggs.
Pero, ¿cómo harías con un comando "borrar todo"? El verbo DELETE solo es adecuado para entidades individuales. Y un "DELETE/productos/leche" implica la eliminación de la categoría del producto "leche" en sí, en lugar de solo todos los productos dentro de la categoría de leche. ¿Y qué pasa si quieres lograr ambas cosas?
Otra pregunta que tengo se refiere a las acciones del servicio web que no están relacionadas con una entidad. Por ejemplo, si estoy diseñando un servicio web para una base de datos de contraseñas, tendría operaciones como "GET /passwords/stackoverflow.com", lo cual está bien, pero también tendría operaciones para deshabilitar el sitio web en caso de intrusión. detección. Bajo el modelo de servicio web de "vieja escuela" tendría un método simplemente llamado "disableWebsite", sin embargo, no puedo crear un verbo HTTP llamado "DISABLE" y un recurso llamado "/ sitio web" (por lo que la solicitud sería " DESACTIVAR/sitio web "). ¿Cuál es la solución aquí?
Finalmente, ¿cómo concilia los formularios HTML con RESTful? Los formularios web solo pueden realizar solicitudes GET utilizando cadenas de consulta o POST. Si tengo un formulario de búsqueda, quiero que solicite "/ products/search/{query}", pero ahora la solicitud se verá como "/ products/search? Query = {query}".
¡Excelente respuesta! Pero usar 'GET/product-categories/milk/delete' no es realmente una buena solución REST, porque GET es un método de guardado y" NO DEBE tener la importancia de tomar una acción que no sea la recuperación "ver [enlace] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html). Yo recomendaría usar un POST algo como 'POST/product-categories/milk/deletecategory'. Esta es la forma en que Twitter maneja muchas cosas con su API. – Robert
El OBTENER es recuperar un formulario, no hacerlo en realidad. –