2016-10-21 2 views
2

Таким образом я получил модели User & Poll где пользователь может создать много опросов (таким образом мы получили 1: N отношения здесь) и присоединиться к таблице Participant как пользователь может быть частью многих опросы и опрос могут иметь много пользователей.REST URL дизайн для отношения многих ко многим

мне нужно определить две конечные точки REST: One для получения списка опросов, созданных пользователем, и один для получения списка опросов, где пользователь является участником.

Для первой конечной точки я определил:

GET /users/:id/polls 

..., который является обычным способом определения 1: N отношений.

Но для второго конечного пункта я совершенно не знаю, как это будет выглядеть в REST. Я в основном имею пользователя и нуждаюсь во всех опросах, в которых пользователь является участником. Я хочу, чтобы все сделать и не хочу тратить слишком много времени, поэтому я пришел с этой мерзостью:

GET /users/:id/polls/participation 

Кто-нибудь вменяемая идея, как это может быть разработана? Можно ли даже сопоставить это с помощью REST?

ответ

1

Я бы рекомендовал сделать polls ресурс верхнего уровня. Затем вы можете поддерживать

GET /polls?createdBy={userId} 
GET /polls?participant={userId} 

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

GET /poll-participants?creator={userId} 
GET /poll-participants?particpant={userId} 

В этом случае вы получите ресурс, который имеет список объектов сопоставления. Они могут держать всех пользователей и опросить в каждом, или у них могут быть ссылки, которые вы должны соблюдать, чтобы ПОЛУЧИТЬ полного пользователя и опрос. Это лучше всего работает, когда пользователь и опрос кэшируются.

+0

Итак, в примере один вы использовали бы параметр 'участник' для' Poll', хотя это только виртуальная собственность? Я вижу, что 'created_by' является законным, так как это реальная собственность на' Poll'. – codepushr

+1

@codepushr Да. В любом случае нет правила, в котором говорится, что могут запрашиваться только свойства ресурса. –

+0

@codepushr Извините, я хочу что-то прояснить. Участники - это свойства * ресурса *. Они не являются свойствами * представления *, которые вы предоставляете своим клиентам. И как ваш ресурс, так и представление (-и) являются полностью отдельными концептуальными объектами из модели данных, удобной для вашего хранилища баз данных, так же, как вы не ограничиваете свой дизайн пользовательского интерфейса, чтобы напрямую сопоставляться с вашим дизайном базы данных. –

1

Ну, поскольку у меня возник вопрос, вам нужно построить простой доступ к данным. Я могу предложить вам добавить параметр get как GET/users /: id/poll? Particip = true. Это может относиться к вашей модели и оставаться простым для понимания.

+0

Не являются ли параметры запроса в REST, которые обычно представляют действительные атрибуты модели? 'Poll' не имеет реального участника' участия', я просто придумал это. Отношение моделируется в таблице соединений. – codepushr

+0

Ничего! Эрик Штейн предположил, что виртуальные свойства и запросы в порядке с ресурсами. – codepushr