2016-10-15 8 views
3

Для примера, скажем, у меня есть API, который обрабатывает передачу данных о книгах обратно в мобильное приложение. Пользователи могут просматривать список книг и добавлять книги в свой список пожеланий.Rest API - это нормально возвращать отдельные пользовательские данные внутри ресурса?

Мой вопрос заключается в том, что при возвращении одной книги или коллекции книг хорошая практика заключается в том, чтобы включать определенную пользователем информацию в каждый книжный ресурс? Под этим я подразумеваю, что в каждой книге можно включить поле, обозначающее, находится ли эта книга в списке пожеланий пользователей, или будет ли этот список возвращаться отдельно и быть в мобильном приложении для выполнения этой проверки.

Разработчики мобильных приложений предпочли бы позвонить/книги и получить ответ, выглядящий примерно так:

{ 
    "books": [ 
    { 
     "id":1, 
     "name": "How to be good at everything", 
     "price": 3.99, 
     "in_wish_list": true 
    }, 
    { 
     "id":2, 
     "name": "How to be good at nothing", 
     "price": 6.50, 
     "in_wish_list": false 
    } 
    ] 
} 

Где я думаю, я предпочел бы, чтобы эти данные разбивались на несколько конечных точек;

/пользователя/29/лист желаний

{ 
    "wishlist": [1,7,9,34,28] 
} 

/книги

{ 
    "books": [ 
    { 
     "id":1, 
     "name": "How to be good at everything", 
     "price": 3.99 
    }, 
    { 
     "id":2, 
     "name": "How to be good at nothing", 
     "price": 6.50 
    } 
    ] 
} 

Таким образом, мобильное приложение отвечает за определение, если книга находится в пользователях личного список.

Я вижу преимущества внедрения пользовательских данных в ресурс книги, но это не так.

Интересно, как другие управляют подобной ситуацией?

+0

Практически каждый, кто разрабатывает API, имеет дело с такой ситуацией. Взгляните на мой [ответ] (http://stackoverflow.com/questions/39685396/should-i-return-id-of-associated-entity-or-whole-entity/39685477#39685477) на очень похожий вопрос , он также должен применяться здесь. – rorschach

+0

Спасибо, клиентские разработчики всегда хотят получить как можно больше информации в одном запросе/ответе, особенно если конкретное представление в мобильном приложении требует этой информации. Хотя я согласен, что это помогает в интеграции с мобильным приложением, мне кажется, что API специально предназначен для клиента. Я предполагаю, что то, что я делаю, взвешивается между возвращаемыми ответами, адаптированными к представлению мобильных приложений, от ответа на ответы на нескольких конечных точках и принуждением клиентского приложения делать больше работы, делая больше вызовов. – SheppardDigital

ответ

0

Теперь все зависит от того, кто будет использовать ваш API и как. Если существует потребность в отображении книг с пожеланиями пользователя, то отдельная конечная точка является обязательной. Конечно, разработчики мобильных клиентов предпочтут один здоровенный вызов нескольким более мелким, но вы также можете пойти на компромисс и иметь как отдельную конечную точку списка желаний пользователя (опять же, если для этого есть сценарий использования), и вернуть логическое значение для каждой книги - таким образом , количество вызовов к вам API может даже уменьшиться.

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

  • Нет связанных вопросов^_^