Что надлежащий путь состоит в том, чтобы структурировать УСПОКОИТЕЛЬНЫЙ ресурс для того, чтобы изменить пароль?
Этот ресурс предназначен, чтобы быть паролем resetter для кого-то, кто потерял или забыл их пароль. Это делает недействительным их старый пароль и посылает им по электронной почте пароль.
Две опции, которые я имею:
POST /reset_password/{user_name}
или...
POST /reset_password
-Username passed through request body
Я вполне уверен, запросом должен быть POST. Я менее уверен, что выбрал соответствующее имя. И я не уверен, должен ли user_name быть передан через URL или тело запроса.
UPDATE: (продолжение комментария ниже)
Я бы выбрал что-то вроде этого:
POST /users/:user_id/reset_password
У вас есть коллекция пользователей, где отдельный пользователь указан {имя_пользователя}
. Затем вы указываете действие, которое нужно выполнить, в данном случае это reset_password
. Это все равно что сказать: "Создайте (POST
) новое действие reset_password
для {имя_пользователя}
".
Предыдущий ответ:
Я бы выбрал что-то вроде этого:
PUT /users/:user_id/attributes/password
-- The "current password" and the "new password" passed through the body
У вас есть две коллекции, коллекция пользователей и коллекция атрибутов для каждого пользователя. Пользователь задается :user_id
, а атрибут задается password
. Операция PUT
обновляет адресованный член коллекции.
Давайте на секунду перейдем к Uber-RESTful. Почему бы не использовать действие DELETE для пароля, чтобы вызвать сброс? Имеет смысл, не так ли? В конце концов, вы фактически отказываетесь от существующего пароля в пользу другого.
Это означает, что вы бы сделали:
DELETE /users/{user_name}/password
Теперь два больших предостережения:
HTTP DELETE должен быть идемпотентным (красивое слово для выражения «ничего страшного, если вы сделаете это несколько раз») . Если вы выполняете стандартные действия, например, отправляете электронное письмо для сброса пароля, то столкнетесь с проблемами. Вы можете обойти это, пометив пользователя / пароль логическим флагом «Сброс». При каждом удалении вы проверяете этот флаг; если он не установлен , то вы можете сбросить пароль и отправить свой адрес электронной почты. (Обратите внимание, что наличие этого флага может иметь и другое применение.)
Вы не можете использовать HTTP DELETE через форму , поэтому вам придется сделать вызов AJAX и / или туннелировать DELETE через POST.