resource query example rest angularjs angularjs-resource

rest - query - http get angularjs example



La "mejor" práctica para una respuesta POST relajante (2)

La devolución del nuevo objeto se ajusta al principio REST de "Interfaz uniforme: manipulación de recursos a través de representaciones". El objeto completo es la representación del nuevo estado del objeto que se creó.

Hay una referencia realmente excelente para el diseño de API, aquí: Mejores prácticas para diseñar una API RESTful pragmática

Incluye una respuesta a su pregunta aquí: las actualizaciones y la creación deben devolver una representación de recursos

Dice:

Para evitar que un consumidor API tenga que volver a presionar la API para obtener una representación actualizada, haga que la API devuelva la representación actualizada (o creada) como parte de la respuesta.

Me parece muy pragmático y encaja con el principio de REST que mencioné anteriormente.

Entonces, nada nuevo aquí. Solo estoy tratando de obtener alguna aclaración y no puedo encontrar ninguna en otras publicaciones.

Estoy creando un nuevo recurso de forma rotunda, por ejemplo:

/books (POST)

con un cuerpo:

{ title: ''The Lion, the Witch and the Wardrobe'', author: ''C. S. Lewis'' }

Sé que debería devolver un 201 (Creado) con un encabezado de ubicación del nuevo recurso:

Location: /books/12345

La pregunta que no puedo responder por mí mismo es qué debería devolver el servidor en el cuerpo.

A menudo he hecho este tipo de respuesta:

{ id: 12345, title: ''The Lion, the Witch and the Wardrobe'', author: ''C. S. Lewis'' }

Lo he hecho por un par de razones:

  1. He escrito api para frameworks frontales como angularjs. En mi caso particular, estoy usando recursos angulares y, a menudo, solo necesito el ID para que el recurso lo ubique. Si no devolviera la identificación en el cuerpo de la respuesta, necesitaría analizarla fuera del encabezado de la ubicación.
  2. En un GET de todos los libros, generalmente devuelvo el objeto completo, no solo el ID. En este sentido, mi código de cliente no tiene que diferenciar dónde obtener el ID (encabezado de ubicación o cuerpo).

Ahora sé que realmente estoy en el área gris aquí, pero la mayoría de la gente dice que devolver todo el recurso es una "mala" práctica. Pero, ¿qué sucede si el servidor cambia / agrega información al recurso? Definitivamente agrega la identificación, pero también podría agregar otras cosas como una marca de tiempo. En el caso de que no devuelva todo el recurso, ¿es realmente mejor hacer un POST, devolver el id, y luego hacer que el cliente realice un GET para obtener el nuevo recurso.


Volver a mostrar todo el objeto en una actualización no parece muy relevante, pero no puedo ver por qué devolver todo el objeto cuando se crea sería una mala práctica en un caso de uso normal. Esto sería útil al menos para obtener la ID fácilmente y para obtener las marcas de tiempo cuando sea relevante. Este es en realidad el comportamiento predeterminado que se obtiene cuando el andamio con Rails.

Realmente no veo ninguna ventaja en devolver solo la identificación y hacer una solicitud GET después, para obtener los datos que podría haber obtenido con su POST inicial.

De todos modos, siempre y cuando su API sea consistente, creo que debe elegir el patrón que mejor se adapte a sus necesidades. No hay una forma correcta de cómo construir una API REST, imo.