He estado reflexionando sobre el método correcto para definir colecciones de recursos que tienen interdependencia.API de REST Diseñar enlaces entre colecciones de recursos
Por ejemplo, vamos a considerar "documentos" y "comentarios" que son independientemente accesible a través de la URI de:
/documents/{doc-uri}
/comments/{comment-id}
Sin embargo, por lo general queremos la colección de comentarios relacionados con un documento específico. Lo cual crea una pregunta de diseño sobre cómo debe ser arqueado esto.
puedo ver algunas opciones principales:
1.) suministrar una URI de semen después de la URI documento para comentarios
GET /documents/{doc-uri}/comments/
2.) Proporcionar un parámetro a la colección de comentarios para seleccionar por documento
GET /comments/{comment-id}?related-doc={doc-uri}
3.) Utilice la negociación de contenido para solicitar que los comentarios relacionados se devuelvan a través del encabezado Aceptar.
// Get all the comments for a document
GET /documents/{doc-uri} Accept: application/vnd.comments+xml
// Create a new comment
POST /documents/{doc-uri} Content-Type: application/vnd.comment+xml <comment>...</comment>
El método 1 tiene la ventaja de colocar automáticamente los comentarios en el contexto del documento. Lo cual también es bueno cuando se crean, actualizan y eliminan comentarios usando POST/PUT. Sin embargo, no proporciona acceso global a los comentarios fuera del contexto de un documento. Entonces, si quisiéramos hacer una búsqueda sobre todos los comentarios en el sistema, necesitaríamos el método n. ° 2.
El método 2 ofrece muchos de los mismos beneficios que el # 1, sin embargo, crear un comentario sin el contexto de un documento no tiene sentido. Dado que los comentarios deben estar explícitamente relacionados con un documento.
El método 3 es interesante desde una perspectiva GET y POST/create, pero se pone un poco complicado con la actualización y la eliminación.
Puedo ver los pros y los contras de todos estos métodos, así que estoy buscando más orientación de alguien que puede haber abordado y resuelto este problema antes.
Estoy considerando hacer ambos métodos 1 & 2, así puedo proporcionar todas las funcionalidades necesarias, pero me preocupa que pueda estar sobre-complicando/duplicando la funcionalidad.
Se refería a hipermedia, no a hipertexto. Esta es la parte HATEOAS (http://en.wikipedia.org/wiki/HATEOAS) de REST. – jpbochi