1

そのため、RESTfull の設計、特にリソースの取り扱いについて多くのことを読んでいます。

UsersPosts、およびCommentsの標準的な例を取り上げると、関係は次のようになります。

ユーザー ---(hasMany)---> 投稿 ---(hasMany)---> コメント

最初は次のようなものを公開することを考えるかもしれません:

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

しかし、特定のUserによって作成された特定のPostのすべてのコメントが必要だとします。私は次のようなことをする必要があります:

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)

ただし、所有者のコンテキストでのみ投稿またはコメントを気にするとします。より自然かもしれない (またはそうでないかもしれない?) 別のリソース構造化を想定します。

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

私にとっては、おそらくリソースが何であるかをよりよく表しているでしょう。次に、必要なのは次のとおりです。

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

これは、以前の方法よりもファイル システムをナビゲートするように思えますが、RESTfull であるかどうかはわかりません (おそらく、これは REST が取り除こうとしていたものです)。なぜなら、コメントリソースにアクセスするには、どのユーザーとどの投稿に属しているかがわかります。ただし、前者には 3 つのリクエストが必要ですが、後者には 2 つしか必要ありません。

考え?

4

2 に答える 2