Estoy tratando de entender la mejor manera de abordar conceptos en una API basada en REST. Los recursos planos que no contienen otros recursos no son un problema. Donde me estoy metiendo en problemas son los recursos complejos.Complejo REST/compuesto/recursos anidados
Por ejemplo, tengo un recurso para ComicBook. ComicBook tiene todo tipo de propiedades como autor, número de serie, fecha, etc.
Un cómic también tiene una lista de portadas 1..n. Estas cubiertas son objetos complejos. Contienen mucha información sobre la portada, el artista, la fecha e incluso una imagen codificada en base 64 de la portada.
Para un GET en ComicBook podría devolver el comic y todas las portadas, incluidas sus imágenes basadas en base64. Probablemente no sea un gran problema para obtener un solo comic. Pero supongamos que estoy construyendo una aplicación cliente que quiere enumerar todos los cómics en el sistema en una tabla. La tabla contendrá algunas propiedades del recurso ComicBook, pero ciertamente no vamos a querer mostrar todas las carátulas de la tabla. La devolución de 1000 cómics, cada uno con varias cubiertas, daría como resultado una cantidad ridículamente grande de datos que llegarían a través del cable, datos que no son necesarios para el usuario final en ese caso.
Mi instinto es hacer que Cover sea un recurso y ComicBook contiene covers. Entonces, Cover es un URI. GET en el cómic funciona ahora, en lugar del gran recurso Cover, enviamos de regreso un URI para cada portada y los clientes pueden recuperar los recursos Cover a medida que lo requieran.
Ahora tengo un problema con la creación de nuevos cómics. Seguramente voy a querer crear al menos una cubierta cuando creo una historieta, de hecho esa es probablemente una regla de negocios. Así que ahora estoy atascado, obligo a los clientes a hacer cumplir las reglas comerciales presentando primero una portada, obteniendo el URI para esa portada, luego publicando un cómic con ese URI en la lista, o mi POST en el cómic toma un aspecto diferente Recurso de lo que escupe. Los recursos entrantes para POST y GET son copias profundas, donde los GET salientes contienen referencias a recursos dependientes.
El recurso de portada es probablemente necesario en cualquier caso porque estoy seguro de que como cliente me gustaría abordar la dirección de las cubiertas en algunos casos. Entonces, el problema existe de forma general, independientemente del tamaño del recurso dependiente. En general, ¿cómo maneja los Recursos complejos sin forzar al cliente a simplemente "saber" cómo se componen esos recursos?
¿Tiene sentido usar [DESCUBRIMIENTO DE SERVICIO RESTANTE] (http://barelyenough.org/blog/2008/01/restful-service-discovery-and-description/)? – treecoder
Estoy tratando de adherirme a HATEAOS, lo cual, en mi opinión, va en contra de usar algo así, pero lo echaré un vistazo. – jgerman
Diferente pregunta en el mismo espíritu. Sin embargo, la propiedad es diferente a la solución propuesta (la de la pregunta). http://stackoverflow.com/questions/20951419/what-are-best-practices-for-rest-nested-resources – Wes