2016-09-09 1 views
1

Это трудно sintetize вопрос в одну строку, но я надеюсь, что смогу объяснить себя лучше здесь:Какая конечная точка должна представлять собой trhreeway отношения многие ко многим с несвязанными элементами, а также

Я получил следующую модель :

Пользователи

  • ID

Сообщения

  • ID

Метки

  • ID

UsersMessagesCategories

  • ID
  • идентификатор пользователя
  • MESSAGEID
  • TagID

Tags являются НЕ созданы user, доступны tags создаются через панель администратора.

Я хочу, чтобы конечная точка, которая возвращает имеющиесяtags для message, но с теми, которые уже связаны, к тому user, к тому, что messageпомечено.

Кажется, что я не могу найти стандартный способ для отдыха.

PS: Просто чтобы было ясно, я хочу:

{ 
    tags:[ 
    {id: 1, associated: false}, 
    {id: 2, associated: true}, 
    {id: 3, associated: false} 
    ] 
} 

Или, может быть, путь:

{ 
    tags:[ 
    associated:[ 
     {id: 2}, 
     {id: 1} 
    ], 
    unassociated: [ 
     {id: 3} 
    ] 
    ] 
} 

Я также не знаю, если он должен быть возвращен (я думаю, это одна):

/users/1/messages/1/tags

или путем:

/tags

или даже:

messages/1/tags

Edit: Измененные конечные точки, так что URI построен с множественными именами.

+0

Что такое * сообщение *? В чем разница между * сообщением * и * UsersMessagesCategories *? –

+0

Typo, связь и сообщение точно такие же. Я изменил его, чтобы он был последовательным. – Astaroth

+1

Во-первых, нет такой вещи, как restful-url IMO - это всего лишь URI. Далее, лучшие практики часто используют имена ресурсов во множественном числе. На ваш вопрос, может ли тег существовать без сообщения? Если это так, то он действителен для того, чтобы быть ресурсом верхнего уровня, если нет, то он должен быть под-ресурсом сообщений. BTW: Мне не нравится счетчик как идентификатор, как если бы вы перемещали элементы или вставляли новые между ними, к какому идентификатору ресурса: 2 указывает? Поэтому лучше использовать некоторые идентификаторы UUID в качестве идентификатора. –

ответ

1

Почему бы вам не попробовать что-то вроде /tags?user=X&message=Y? Как я понял, теги не являются прямыми детьми сообщений или пользователей, поэтому нет необходимости быть прямыми детьми в шаблоне URL.
REST не определяет реальный шаблон для доступа к ресурсам, поэтому вы можете использовать его более похожим на запрос с параметрами GET, как я писал, или вы можете иметь более древовидную структуру, как вы предложили.
Лучшее, что вы можете сделать, - сделать каждый ресурс REST вашего проекта доступным с помощью аналогичного шаблона URL, чтобы сделать его более удобным для пользователя.

Первое решение, которое вы предложили форматировать в JSON результаты, тем лучше один, на мой взгляд

{ 
    tags: 
    [ 
     {id: 1, associated: false}, 
     {id: 2, associated: true}, 
     {id: 3, associated: false} 
    ] 
} 

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

1

Вы могли бы пойти (виду множественного числа имен):

/users/:user-id/messages/:message-id/tags 

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

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