2016-08-04 3 views
0

Я строю REST api. Простой пример проблемы, которую я ищу для решения, включает в себя 2 объекта домена: сообщения & комментарии. В настоящее время запрос GET на http://myapidomain.com/posts возвращает коллекцию сообщений, где каждое сообщение содержит ссылку на комментарии к этому сообщению. Я также дам возможность включить ссылку комментариев в ответ, чтобы список комментариев отображался в строке, а не указатель, указывающий на них. Для каждого подхода есть плюсы и минусы, но веские причины включают оба варианта.Нужно ли выкладывать вложенные ресурсы?

Моя проблема заключается в том, что, например, мой запрос GET на/posts возвращает выгружаемый список (например, размер страницы 10), в который включен список комментариев, а не только ссылка ... do I нужно также пейджинговать вложенные ресурсы? Я волнуюсь, что у одного сообщения может быть неограниченное количество комментариев, поэтому список из 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" 
    } 
} 
Смежные вопросы