2016-04-18 2 views
0

В RESTful API у меня есть пользовательские ресурсы на /users и /users/:id с их именами пользователей, адресами электронной почты и паролями.Сменить пароль в RESTful API (проверка сервера на PATCH)

Когда я хочу обновить информацию о пользователях, я могу легко сделать PATCH:/users/:id с некоторыми данными JSONPatch.

Сейчас проблема заключается в том, что я не могу понять, как обрабатывать изменения пароля сценарий к с currentPassword, newPassword и newPasswordConfirm форме.

Какой МЕТОД следует использовать (PATCH представляется уместным, но проблематичным) и каким образом данные должны передаваться (тело/заголовок/...).

В более широкой области применения - как должен обрабатываться патч с дополнительными полями для проверки.

This post похоже, но не охватывает эту точную тему.

ответ

5

Вместо PATCH, чтобы частично обновить пользователь Ресурс, вы когда-нибудь считали PUT, чтобы сменить пароль?

Ваша конечная точка может быть , где пароль является суб-ресурс пользователя ресурса. И ваш запрос на смену пароля будет как:

PUT /users/1/password HTTP/1.1 
Host: api.example.com 
Content-Length: 113 
Content-Type: application/json 
Authorization: Basic YWRtaW46c2VjcmV0 

{ 
    "currentPassword" : "secret", 
    "newPassword": "othersecret", 
    "newPasswordConfirm" : "othersecret" 
} 
+0

Я действительно рассматривал это решение, но хотел, чтобы избежать разоблачения отдельных полей API. Кроме того, я предпочел бы использовать метод «POST», так как операция «PUT» определяется как идемпотент, пока эта операция не будет явно. – Aides

+0

Не могли бы вы взглянуть на мой ответ и дать обратную связь? – Aides

1

Через некоторое глубокое погружение в JSONPatch я смог придумать подход добавления test операций с данными накладных.

Это может выглядеть примерно так:

[ 
    { "op": "test", "path": "/password", "value": "oldPassword" }, 
    { "op": "replace", "path": "/password", "value": "newPassword" }, 
    { "op": "test", "path": "/password", "value": "newPasswordConfirm" } 
] 

Существуют ли какие-либо проблемы с использованием этого метода?

+0

Я думаю, что этот подход будет работать нормально. Тем не менее, IMHO, подход «PUT» делает его более ясным. –

+0

Хорошо, одна вещь, которая может быть сделкой, заключается в том, что я должен был бы заверить, что потребитель действительно использует этот формат запроса. Без дальнейшей проверки на стороне сервера потребитель мог просто отправить замену без тестовых примеров. – Aides

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

  • Нет связанных вопросов^_^