2010-12-10 18 views
8

Estoy diseñando una API relajante y tratando de hacerlo bien por primera vez.Respuesta RESTful adecuada a POST y PUT en recursos anidados

He definido algunos recursos anidados (comentarios en una publicación de blog), y esa elección refleja el hecho de que los comentarios están anidados dentro del documento de publicación del blog en mongo.

No me interesa publicar comentarios individuales fuera de contexto, por lo que he postergado la implementación de GET para los recursos anidados. Sin embargo, tiene sentido implementar POSTing en la recopilación de comentarios y PUTting a un comentario uri.

preguntas específicas:

1) ¿Tiene sentido para responder a un poste con una 201 y una cabecera Location establece en el recurso de los padres? Si no, ¿cómo comunico la ubicación principal para informar las opciones de navegación en el cliente?

2) Pregunta similar para PUT, ¿cuál es la mejor forma de comunicarle al cliente que debe buscar en el recurso padre para localizar su actualización? (preferiblemente sin que el cliente tenga que hacer suposiciones sobre mi esquema de uri). ¿El encabezado de ubicación es razonable en un 200?

Respuesta

12

Aunque nunca lo he hecho yo mismo, he oído hablar de personas que usan el encabezado Content-Location para este propósito. Content-Location se usa para identificar la ubicación del recurso representado por la entidad devuelta.

En el caso de su PUT y POST, es posible que no desee devolver la publicación completa del blog, por lo que no estoy seguro de qué tan válido es devolver un encabezado Content-Location incluso cuando no devuelve una representación en la respuesta.

Dicho esto, no puedo pensar en ningún efecto negativo, por lo que aquí es lo que estoy sugiriendo:

PUT /Blog/343/Comment/23 
=> 
200 OK 
Content-Location: /Blog/343 


POST /Blog/343/Comments 
=> 
201 Created 
Location: /Blog/343/Comment/24 
Content-Location: /Blog/343 
+0

Gran puntero! Lo llamaremos una "representación minimalista" = o) – BnWasteland

+0

@BnWasteland Para los casos en los que utiliza PUT para actualizar partes de un recurso más grande, he estado llamando a eso el enfoque "mini-PUT". –

Cuestiones relacionadas