Quindi ho letto molto sul design RESTfull, in particolare sulle risorse.
Esempio canonico di Utenti , Post e Commenti , con relazioni come:
Users ---(hasMany)---> Post ---(hasMany)---> Comment
Si potrebbe inizialmente pensare di esporre qualcosa del tipo:
GET /users GET /posts GET /comments
POST /users POST /posts POST /comments
GET /users/id GET /posts/id GET /comments/id
PUT /users/id PUT /posts/id PUT /comments/id
DELETE /users/id DELETE /posts/id DELETE /comments/id
Ma poi, dì che voglio tutti Commenti di un certo post fatto da un particolare utente . Dovrei fare qualcosa del tipo:
GET /users/id
> someUser
> var postIds = someUser.posts()
GET /posts?id=<postIds[0]>&id=<postIds[1]>&...
> somePosts
> **application user inspects posts to see which one they care about**
> var postOfInterest = somePosts[x];
> var postId = postOfInterest.id;
GET /comments?id=postId
> someComments (finally)
Supponiamo che mi interessi solo un post o commento nel contesto del suo proprietario. Supponiamo che una diversa struttura delle risorse possa essere (o meno?) Più naturale:
GET /users
POST /users
GET /users/id
PUT /users/id
DELETE /users/id
GET /users/id/posts
POST /users/id/posts
GET /users/id/posts/id
PUT /users/id/posts/id
DELETE /users/id/posts/id
GET /users/id/posts/id/comments
POST /users/id/posts/id/comments
GET /users/id/posts/id/comments/id
GET /users/id/posts/id/comments/id
GET /users/id/posts/id/comments/id
Quale per me, è probabilmente una migliore rappresentazione di quali siano le risorse. Quindi tutto ciò di cui ho bisogno è:
GET /users/id/posts
> somePosts
> **application user inspects posts to see which one they care about**
> var postOfInterest = somePosts[x];
> var postId = postOfInterest.id;
GET /users/id/posts/postId/comments
> someComments
Questo sembra più come navigare in un file system rispetto al metodo precedente - ma non so se RESTfull (forse questo è ciò che REST stava cercando di sbarazzarsi di ) perché in Per accedere a una risorsa Commenti , ho bisogno di sapere quale utente e quale post appartiene a. Ma il primo richiede 3 richieste, mentre il secondo richiede solo 2.
Pensieri?