RESTful дизайн URL для виджетов, принадлежащих пользователям - PullRequest
2 голосов
/ 07 марта 2011

Мой RESTful API всегда имеет аутентификацию, поэтому все вызовы аутентифицируются для конкретного пользователя.

Какой дизайн URL лучше RESTful по протоколу HTTP? Помните, что идентификатор пользователя 3 уже аутентифицирован через базовый http auth / digest.

http://server.com/users/3/widgets/ (возвращает все виджеты для идентификатора пользователя 3)
http://server.com/users/3/widgets/13 (возвращает идентификатор виджета 13)

или

http://server.com/widgets/ (возвращает все виджеты для идентификатора пользователя 3)
http://server.com//widgets/13 (возвращает идентификатор виджета 13)

Лучше ли всегда иметь уникальный URL-адрес, такой как http://server.com/users/3/widgets/, даже зная, что только пользователь № 3 будет единственным, кто будет к нему обращаться? Является ли излишним повторное указание / user / 3 при каждом вызове, например http://server.com/users/3/widgets/

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

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

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

0 голосов
/ 08 марта 2011

Технически, REST не должен иметь состояния, поэтому более «правильная» реализация была бы первой, как вы перечислили.

Однако я бы поступил немного иначе, чем вы предлагаете для первого метода -Будет ли информация, возвращаемая пользователем о конкретном виджете, изменяться в зависимости от пользователя?Если нет, вы можете попробовать это:

http://server.com/users/3/widgets/ (Returns all widgets for user id 3)
http://server.com/widgets/13 (Returns widget id 13)

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

Я также основываю все это на предположении, что список виджетов может отличаться от клиента к клиенту - если это не так, и все клиенты будут видеть один и тот же список виджетов, независимо от причины.передать пользователя, так что идите вторым путем.

0 голосов
/ 07 марта 2011

Я бы пошел с первым, потому что это полностью указывает ресурс.

...