18 votos

RESTO de verbos - que el convenio es "correcto"

Estoy bien en la implementación de un servicio REST (en una plataforma Windows CE si que importa) y empecé con IBM definiciones generales de uso de POST para la creación de (Inserta) y se PONE a actualizar.

Ahora me he encontrado a través del Sol definiciones que son exactamente lo contrario. Así que mi pregunta es, cual es la "generalmente aceptado" definición? O es que hay incluso uno?

16voto

Cristian Boariu Puntos 4280

La desventaja de la utilización de PONER a la creación de recursos es que el cliente tiene que proporcionar la IDENTIFICADOR único que representa el objeto que se está creando. Mientras que es posible para el cliente para generar este IDENTIFICADOR único, la mayoría de los diseñadores de aplicaciones prefieren que sus servidores (generalmente a través de sus bases de datos) crear esta identidad. En la mayoría de los casos queremos nuestro servidor para controlar la generación de Identificadores de recursos. Entonces, ¿qué hacemos? Podemos cambiar para el uso de POST en lugar de PONER.

Así: Poner = ACTUALIZAR

Post = INSERTAR

14voto

Volodymyr Frolov Puntos 353

La razón para utilizar POST como INSERTAR y PONER la ACTUALIZACIÓN es que el POST es el único nonidempotent y operación insegura de acuerdo a HTTP. Idempotente significa que no importa cómo muchas veces usted aplicar la operación, el resultado es siempre el mismo. En SQL INSERT es la única nonidempotent operación por lo que debe ser asignada a POST. La ACTUALIZACIÓN es idempotente por lo que puede ser asignada a PONER. Esto significa que el mismo PUESTO/operación de ACTUALIZACIÓN se puede aplicar más de una vez, pero sólo la primera cambiará el estado de nuestro sistema de base de datos.

Así que usando PONER para INSERTAR se rompió HTTP semántica, a saber, el requisito de que la operación de colocación debe ser idempotente.

6voto

yfeldblum Puntos 42613

Los verbos son:

GET {path}: Recuperar el recurso cuyo identificador es {path}.

PUT {path}: Crear o actualizar el recurso cuyo identificador es {path}.

DELETE {path}: Eliminar el recurso cuyo identificador es {path}.

POST {path}: Invocar una acción que es identificado por {path}.

Cuando la intención es crear un nuevo recurso, podemos usar PUT si sabemos qué es el identificador del recurso debe ser, y podemos usar POST si queremos que el servidor para determinar el identificador del nuevo recurso.

5voto

Jan Algermissen Puntos 2915

Se puede utilizar para la creación, cuando el servidor concede al cliente el control sobre una parte de la URI de espacio. Esto es equivalente a la creación de archivos en un sistema de archivos: cuando se guarda en un archivo que aún no existe lo crea y si ese archivo existe, el resultado es una actualización.

Sin embargo, PUESTO que carecen de la capacidad de una implícita intención del cliente. Considere la posibilidad de colocar un pedido: si pones a /pedidos/mi-nuevo-orden el significado sólo puede ser la actualización de los recursos identificados por /pedidos/mi-nuevo-orden, mientras que POST /pedidos/ puede significar 'lugar un nuevo orden" si el POST aceptar el recurso de la correspondiente a la semántica.

IOW, si quieres lograr algo como un efecto secundario de la creación de un nuevo recurso que se debe usar POST.

Jan

2voto

S.Lott Puntos 207588

Utilizamos POST= Crear, PONER= Actualización.

Por qué? No hay ninguna buena razón. Tuvimos que elegir uno, y que es la que yo he elegido.

Edit. Buscando en otras respuestas, me doy cuenta de que la clave de la creación problema podría tomar la decisión.

PUBLICAR nuevas entradas y devolver un objeto JSON con la clave generada. Parece que este es un mejor ajuste para los generalmente aceptados POST semántica.

Ponemos a las entradas existentes con un total de URI que identifica el objeto.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: