2014-11-24 3 views
4

Представьте себе ресурс, такой как авторы. Автор имеет несколько книг, несколько фотографий и т. Д.REST API и загрузка загруженных ресурсов

На некоторых страницах моего приложения мне нужны только данные авторского права, такие как имя. На других страницах мне нужны все вложенные ресурсы. Как обрабатывать загрузку вложенных ресурсов?

  1. ли я загрузить все в одном вызове, что:
    GET/авторы возвращает { имя: х, книги: { BookName: а, ... }}

  2. Примите необязательный параметр, который указывает вложенные объекты, например:
    GET/авторы? Include = books & Фотографии

  3. Возвращайте только данные об авторских правах, затем извлекайте связанные ресурсы в последующих вызовах. Тем не менее, это может привести к п + 1 запросов типа, такие как:
    GET/авторы
    GET/автора/1/изображений
    GET/автора/1/книги

Любое понимание ценится

ответ

0

Я хотел бы пойти со следующими URL-адресов REST-стиле:

GET/авторы - получить список всех авторов

GET/авторы/{AuthorID} - основная информация о concr ет автор в одном запросе

GET/авторы/{AuthorID}/детализированный - детальная информация о конкретном авторе в одном запросе

Кроме того, вы можете иметь следующие методы для извлечения конкретной информации об авторе:

GET/авторы/{AuthorID}/изображения - получить все изображения от автора

GET/авторы/{AuthorID}/изображений/{ImageID} - получить одно изображение автором

GET/авторы/{AuthorID}/книги - получить все книги автора

GET/авторы/{AuthorID}/книги/{BookID} - получить одну книгу автора

Также рекомендую прочитать соглашения об именах REST ресурсов here.

+0

Это похоже на самый чистый подход. Наверное, я не должен беспокоиться о потенциальном штрафе за исполнение, пока он не станет реальным вопросом? – recipherus

+0

@recipherus, клиенты вашего сервиса REST, вероятно, ожидают, что большинство операций, перечисленных выше (кроме _GET/authors/{authorId}/detail_), будут присутствовать в вашем API. Но нечего добавлять методы, которые будут оптимизировать некоторые вызовы. Как и в вашем примере: _GET/авторы/{authorId}/подробный? Include = books & pictures_. Таким образом, вы можете комбинировать свои 2 и 3 подхода, чтобы получить баланс чистого REST и производительности. – ialekseev

Смежные вопросы