Supongamos que quería diseñar una APLICACIÓN REST que habla de canciones, álbumes y artistas (en realidad lo hago, como 1312414 personas antes que yo).Forma RESTful de tratar con las relaciones bidireccionales entre los recursos
Un recurso de canción siempre está asociado con el álbum del que forma parte. Por el contrario, el recurso del álbum está asociado con todas las canciones que contiene. Las asociaciones se expresan en las representaciones de recursos a través de enlaces.
Como tal, las representaciones se vería algo como esto:
{
song: 'xyz',
links: [
{ rel: 'album', url: '.../albums/abc' }
]
}
{
album: 'abc',
links: [
{ rel: 'song', url: '.../songs/xyz' },
{ rel: 'song', url: '...' },
{ rel: 'song', url: '...' },
{ rel: 'song', url: '...' }
]
}
dado, que yo quiero que esto se mantenga verdadera (tal vez el problema radica en la "Dada"), ¿cómo puedo diseñar mi API , tal que la creación de un álbum o recurso de canción no tiene efectos secundarios en recursos de canciones o álbumes previamente existentes?
Esto es una especie de problema de huevo/gallina. Si creo primero un recurso de canción (POST/songs /) y luego creo un recurso de álbum (POST/albums /), el recurso de la canción se modifica como parte de la creación del álbum (lo cual es malo según los principios REST), porque la asociación entre los dos recursos se está actualizando en el servidor. Del mismo modo para el escenario donde primero creo el álbum, la canción es el segundo.
Creo que podría evitar todo el problema evitando los efectos secundarios en el servidor y pasando la carga de administrar las relaciones bidireccionales al cliente.
Además, no quiero que se creen álbumes y canciones como un todo.
Lo único que puedo pensar ahora es incluir el efecto secundario antes mencionado en la semántica de mi API respondiendo a una creación de recursos con una representación que contiene una lista de enlaces a recursos que se han modificado como resultado de la solicitud. Eso hace que el efecto secundario sea explícito, pero aún así no es tranquilo.
crear una canción, si tiene un campo de álbum y el álbum no existe, cree el álbum. crea un álbum, si tiene una canción que no existe, crea la canción. – zzzzBov
Una forma de verlo es cada álbum y la canción es un recurso encapsulado y los enlaces son solo el gráfico que los conecta entre sí. Cambiar los enlaces cambia la relación entre los recursos pero los recursos en realidad no cambian. – abraham
"el recurso de la canción se modifica como parte de la creación del álbum (lo cual es malo según los principios de REST)" ¿Cuál es el principio? ¿Puedes proporcionar un enlace? En mi experiencia, la actualización de recursos tiene efectos secundarios en otros recursos, todo el tiempo. –