Restful Api: идентификатор пользователя в каждом методе хранилища? - PullRequest
1 голос
/ 03 марта 2011

Я новичок в обоих сервисах .Net и RESTful.

Вот иерархия объектов в моей базе данных: Users-> Folders-> Notes.

API: GET / api / note / {noteid}

будет сопоставлен с вызовом хранилища

NoteRepository :: GetNote (userId, noteId)

Обратите внимание, что я передаю userId, чтобы убедиться, что заметка принадлежит вошедшему в систему пользователю в целях безопасности.

Это правильный подход? Это означает, что каждый вызов репозитория будет иметь первый параметр в качестве userId, чтобы проверить, принадлежит ли объект, к которому осуществляется доступ, пользователю.

Есть ли лучший подход?

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Вам не нужен идентификатор пользователя, поскольку

GET /api/note/{noteid}

действительно уникален.

Допустимый сценарий добавления идентификатора:

GET /api/{userId}/notes

И затем, если вам нужна конкретная заметка, вы можете:

GET /api/{userId}/notes/{noteId}

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

С уважением.

2 голосов
/ 08 августа 2011

Я бы также ввел идентификатор пользователя в API из-за ограничений без сохранения состояния и кэширования, описанных в статье Википедия REST .

Однако, если я проверю Google Tasks RESTAPI , они не включают в себя идентификатор пользователя, то же самое для Twitter API , поэтому, как представляется, существует тенденция не включать идентификатор пользователя.Если кто-то может пролить свет, я был бы признателен.

ОБНОВЛЕНИЕ : Если подумать об этом, если noteid уникален для всех пользователей, нет необходимости включать идентификатор пользователя, поэтомуGET / api / note / {noteid} в порядке.

Однако логическим родителем в интерфейсе restful будет GET / api / note / для получения списка всех заметок, и здесь я имеювозражение, поскольку список будет отличаться в зависимости от пользователя, который его запрашивает, что делает его не кешируемым.

Что касается вашей части с точечной сетью, я думаю, что передача идентификатора пользователя среди методов с точечной сетью - это прекрасно.

...