2014-12-26 2 views
1

В моих моделях у меня есть Event s и User s. Каждый Event имеет атрибут leader, который указывает на User, однако не всегда требуется хост, и в этом случае хост является нулевым.Выявление отношений в API REST (как пользователь ссылается на объекты?)

В моей API:

GET /users/ возвращает список всех пользователей

GET /users/3/ возвращает пользователя 3 инфо, {"name": "John", "href": "https://stackoverflow.com/users/3/"}

GET /events/ возвращает список всех событий

GET /events/2/host/ должен возвращать пользователю кто является хозяином для события 2. (скажем, это пользователь 3)

Должен ли я вернуть {"href": "https://stackoverflow.com/users/3/"}, просто ссылку на пользователя? Или представление самого пользователя, {"name": "John", "href": "https://stackoverflow.com/users/3/"}?

Допустим, я пошел с первым вариантом. Как изменить пользователя?

PUT /events/2/host/ json={"href": "https://stackoverflow.com/users/2/"} - это имеет смысл? Затем мой сервер должен будет проанализировать конечную точку, чтобы определить, какой идентификатор пользователя является новым хостом, а затем назначить это в базе данных. Кажется немного неэлегантным, но Flask имеет способ проанализировать конечную точку в аргументах. Но правильно ли это сделать?

И наконец, в ресурсе GET /events/2/, я думал о наличии атрибута "host":{"href": "/events/2/host/"} в представлении. Имеет ли это смысл? И если нет хоста, атрибут href вообще не будет, просто пустой словарь, назначенный host.

ответ

0

Чтобы быть коротким, я думаю, что вы должны вернуть представление при получении, например, хоста для события, и использовать ссылку при ее обновлении. Но конструкция остается до вас ;-)

Вот различных случаев:

GET /events/2/host/ 
{"name": "John", "href": "https://stackoverflow.com/users/3/"} 

PUT /events/2/host/ 
{"href": "https://stackoverflow.com/users/3/"} 

DELETE /events/2/host/ (to set the host field to null) 

Я думаю, что OData v4 спецификация может дать вам некоторые хорошие идеи для вашего дизайна. Эта ссылка дает хорошее представление о способе управления отношениями сущностей с OData: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/entity-relations-in-odata-v4.

Кроме того, с его параметром запроса $expand, OData позволяет настроить загрузку зависимости объекта. Если, например, определено поле host, у вас будет контент объекта, на который ссылается, если нет, только ссылка.

OData также предоставляет возможность получить ссылку на зависимость с суффиксом $ref.

Еще одна ссылка может также дать вам несколько идей: http://templth.wordpress.com/2014/12/15/designing-a-web-api/.

Надеюсь, это поможет вам. Thierry

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