2016-08-04 2 views
0

REST API를 구축 중입니다. 내가 해결하려고하는 문제의 간단한 예제는 2 개의 도메인 엔티티를 포함합니다 : 게시물 & 개의 댓글. 현재 http://myapidomain.com/posts에 대한 GET 요청은 게시물 모음을 반환하며, 각 게시물에는이 특정 게시물에 대한 의견 링크가 있습니다. 주석 목록을 가리키는 URL이 아닌 줄에 주석 목록이 표시되도록 응답에 주석 링크가 확장되도록 할 수도 있습니다. 각 접근 방식에는 장단점이 있지만 두 가지 옵션을 모두 포함하는 좋은 이유가 있습니다.중첩 된 리소스도 페이징해야합니까?

내 문제는 예를 들어/posts에 대한 내 GET 요청이 단지 링크 대신 주석 목록이 포함 된 게시물의 페이지 크기가 10 인 페이지 된 목록을 반환한다고 ... 중첩 된 리소스도 페이징해야합니까? 단일 게시물에 무제한의 댓글이 포함될 수 있으므로 걱정하지 않아서 10 개의 게시물 목록에 하나의 게시물에 대해 100 초 이상의 댓글이있는 게시물이 하나 이상있을 수 있습니다. 내부/중첩 된 리소스도 페이징해야합니까? 아니면이 상황을 처리하기위한 표준 방법이 있습니까?

답변

1

컬렉션 하위 리소스에 대한 링크를 포함하는 것이 좋습니다. 클라이언트가 콜렉션을 필요로하면, 링크에 대한 새로운 요청이 수행 될 수 있습니다.

그러나 어떤 이유로 든 각 게시물에 미리로드 된 주석이 필요한 경우 첫 번째 페이지 만 포함하고 다음 페이지를로드하는 링크를 제공하는 것이 좋습니다.

{ 
    "data": [ 
    { 
     "id": 1, 
     "title": "It's a post", 
     "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", 
     "comments": { 
     "data": [ 
      { 
      "content": "It's a comment", 
      "author": "John Doe" 
      }, 
      { 
      "content": "It's comment", 
      "author": "Jane Doe" 
      }, 
      ... 
     ], 
     "paging": { 
      "next": "http://api.example.com/posts/1/comments?page=2&size=10" 
     } 
     } 
    }, 
    ... 
    ], 
    "paging": { 
    "previous": "http://api.example.com/posts?page=1&size=10", 
    "next": "http://api.example.com/posts?page=3&size=10" 
    } 
}