Estoy aprendiendo sobre el DESCANSO y la PUT/DELETE, he leído que esos dos (junto con GET) es idempotente lo que significa que varias solicitudes de poner el servidor en el mismo estado.

Hace un duplicado de la PUT/DELETE solicitud dejar nunca el navegador web (cuando se utiliza XMLHttpRequest)? En otras palabras, el servidor de actualización de la misma base de datos de registro para cada PUESTO de solicitud, o duplicar las solicitudes se omiten automáticamente?

Si sí, ¿cómo está usando PUT o DELETE diferente de la POST?

Leí un artículo en el que sugería que los servicios web RESTful eran el camino a seguir. ¿Hay alguna razón en particular por los formularios de HTML5 no admiten PUT/DELETE métodos?

InformationsquelleAutor Lea Hayes | 2011-08-10

3 Comentarios

  1. 43

    RESTO es sólo una estructura de diseño para el acceso a datos y la manipulación. No hay-en-piedra de reglas para un servidor debe reaccionar a las peticiones de datos.

    Que se dice, normalmente un DESCANSO solicitud de PUT o DELETE sería como sigue:

    DELETE /item/10293
    

    o

    PUT /item/23848
    foo=bar
    fizz=buzz
    herp=derp
    

    Las solicitudes dado están asociados con un ID específico. Debido a esto, diciendo que el servidor de eliminar el mismo ID de 15 veces va a terminar con prácticamente el mismo resultado que el de llamar una vez, a menos que haya algún tipo de re-numeración pasando.

    Con el PUT petición, diciendo que el servidor de actualización de un artículo específico a los valores específicos que también conducen al mismo resultado.

    Un caso donde un comando sería no idempotente suele implicar algún tipo de valor relativo:

    DELETE /item/last
    

    Llamado 15 veces más probable que quitar 15 elementos, en lugar de la misma último elemento. Una alternativa el uso de HTTP correctamente podría parecerse a:

    POST /item/last?action=delete
    

    De nuevo, el DESCANSO no es un oficial de la especificación, es sólo una estructura con características muy parecidas. Hay muchas maneras de implementar un Descanso de la estructura.


    Como para HTML5 formas de apoyo PUT & DELETE, es realmente depende de los navegadores para empezar a apoyar los diferentes métodos en lugar de la especificación en sí. Si todos los navegadores iniciado la aplicación de diferentes métodos para el envío de formularios, estoy seguro de que sería un añadido a la especificación.

    Con la web va de la manera que es, un buen Descanso de la implementación es responsable también de incorporar alguna forma de AJAX de todos modos, por lo que a mí me parece en gran medida innecesaria.

    • El DESCANSO no es un oficial de la especificación, pero es sólo para recordarnos que no se desvíe de HTTP, con nuevos métodos o la adición de estado para las transacciones. Por lo tanto, una petición como DELETE /item/last no es idempotente así que no debería ser utilizado. Por ejemplo, un navegador que iba a enviar una solicitud de nuevo sin pedir confirmación del usuario cuando se golpea la espalda. También, POST /item/last?action=delete parece una mala idea, ¿cómo se puede garantizar que va a eliminar el recurso que pretende?
    • buen punto. De hecho, me la cubierta de este tema al final de la mi respuesta a una pregunta diferente, y probablemente debería retocar esta respuesta para reflejar un mejor enfoque.
    • De acuerdo a la RFC2616 métodos GET, HEAD, PUT y DELETE son idempotente. Por lo que no está permitido el uso de DELETE /item/último como no está permitido el uso de GET /item/última o PONER /item/última. La razón es que los servidores intermedios debe ser capaz de repetir ELIMINAR solicitud, en caso de incumplimiento o de no respuesta sin romper la lógica de la aplicación.
    • «Por lo que no está permitido…» es la programación, usted está permite para hacer lo que quieras porque nadie puede detenerte. Eso no quiere decir que el concepto de /item/last es buena, pero la pregunta era acerca de si este comportamiento era automática, la que más decididamente no lo es.
  2. 6

    Hace un duplicado de la PUT/DELETE solicitud dejar nunca el navegador web (cuando el uso de XMLHttpRequest)?

    Sí, claro. Idempotence es sólo una convención y no forzada. Si usted hace una solicitud, duplicados o no, se ejecutará a través de.

    En otras palabras, el servidor de actualización de la misma base de datos de registro para cada PUESTO de solicitud, o duplicar las solicitudes se omiten automáticamente?

    Si se cumple con RESTO debe actualizar el mismo registro de base de datos dos veces, por ejemplo, la ejecución de UPDATE user SET name = 'John' dos veces. No hay garantía de lo que va o no va a hacer, aunque, depende de cómo se implementa.

    Si sí, ¿cómo está usando PUT o DELETE diferente de la POST?

    Es sólo una convención. Solicitudes PUT y DELETE puede o no puede ser manejado de manera diferente de POST en el código del sitio.

    Leí un artículo en el que sugería que los servicios web RESTful eran el camino a seguir. ¿Hay alguna razón en particular por los formularios de HTML5 no admiten PUT/DELETE métodos?

    No estoy muy seguro, para ser honesto. Usted puede evitar esto mediante el uso de un oculto <input> campo llamado _method o similar y configurarlo para ELIMINAR o PONER, y luego de manejar que el lado del servidor.

    • XMLHttpRequest seguiría apoyo PUT/DELETE incluso si el HTML 5 spec no. a la derecha? Que sería otra solución. Supongo que sería la forma seria de hacer que los navegadores tomar a la especificación así.
    • sí, pero técnicamente hablando no tiene nada que ver con formularios HTML que es lo que había pedido :S
    • Idempotence es más que un convenio es una promesa de que el servidor que hace que el cliente (y los intermediarios). Sin embargo, como el ejecutor del servicio, es su responsabilidad cumplir con (o romper) que prometen. Esto no se aplica como tal, sino más bien, los intermediarios (es decir, proxies) hacer suposiciones basadas en esa promesa y si no es verdad, no se puede tener malas consecuencias para su servicio o sus clientes. La única diferencia con el POST es que el POST NO hace promesas acerca de la seguridad o idempotence, por lo que los proxies no hacer suposiciones acerca de él.
    • Re: «Hace un duplicado de la PUT/DELETE solicitud dejar nunca el navegador web» – que no debe ser emitido por el propio explorador web más de una vez. Si la pila TCP devuelve el error en el navegador, se debe informar al código JavaScript y el código debe tratar de enviar de nuevo, lo que es seguro hacerlo según las especificaciones.
  3. 2

    PONER operación idempotente, pero no una operación segura. En caso de éxito, si se PONEN en operación se repite no va a insertar registros duplicados. Repetir la operación de colocación en caso de NetworkFailure errores después de verificar encabezados condicionales como If-sin modificaciones-puesto y/o si el partido. No repita en el caso de 4XX o 5XX códigos de error.

Dejar respuesta

Please enter your comment!
Please enter your name here