Cuándo usar recursos anidados en una API RESTful

15

Tengo dos recursos: usuarios y enlaces.

Los usuarios pueden tener varios enlaces asociados con ellos. He diseñado mi API RESTful para que pueda acceder a los enlaces asociados con un usuario en el siguiente URI:

/users/:id/links

Sin embargo, siempre necesito tener un URI solo para los enlaces, a veces es posible que desee todos los enlaces, independientemente del usuario.

Para esto tengo:

/links

¿Esto suena bien? ¿Tienes dos URI para enlaces?

Me pregunto si debería llegar a los enlaces de un usuario con un URI como:

/links/user/:id o /links/?user=:id

De esta manera, solo tengo un recurso para enlaces.

    
pregunta Oliver Joseph Ash 18.02.2013 - 21:12
fuente

2 respuestas

14

No, no hay nada de malo en tener múltiples recursos para la misma "cosa", en este caso listas de enlaces.

Recientemente estábamos luchando con el mismo problema. Nuestra decisión fue tener todos los recursos donde no hay una propiedad estricta para no anidar. En otras palabras, los enlaces se modelarían bajo

/links -- all links
/links/:linkid -- a particular link

Luego, los filtros en la colección de enlaces se expresan como parámetros de consulta. Por lo tanto, para obtener los enlaces de un determinado usuario, debe utilizar:

/links?user=/users/:userid

Esto también permite una composición más fácil de los filtros:

/links?user=/users/10&since=2013-01-01

Y es fácil de entender conceptualmente: tienes una colección de elementos y le agregas filtros.

Dicho esto, no hay nada más "REST" en este enfoque que cualquier otro esquema de nombres de URI. Es solo una convención que los desarrolladores entendemos y aceptamos fácilmente para los humanos. A REST no le importa lo que pones en tus identificadores de recursos.

    
respondido por el waxwing 18.02.2013 - 22:17
fuente
1

Así que mi preocupación es: / users /: userid / links devuelve "links", PERO si el user_id no está identificado, esto debería devolver un 404.

Sin embargo

/ links? userid =: userid potencialmente devolvería una lista vacía (esencialmente un 200) que en realidad es probablemente un error. Y muy posible.

Aunque ambos funcionan, el anidamiento te brinda una funcionalidad adicional a la que puedes recurrir más adelante.

    
respondido por el Richard Browne 23.11.2017 - 12:43
fuente

Lea otras preguntas en las etiquetas