在RESTful API中,我在/users
和/users/:id
上拥有用户资源及其用户名,电子邮件地址和密码。
当我想更新用户信息时,我可以轻松地使用PATCH:/users/:id
个JSONPatch
数据进行currentPassword
。
现在的问题是,我无法弄清楚如何使用newPassword
,newPasswordConfirm
和{{1}}形式处理更改密码方案。
应该使用什么方法(PATCH似乎合适但有问题)以及数据应以何种方式传输(正文/标题/...).
在更广泛的范围内 - 如何处理具有更多验证字段的补丁。
This post似乎有关,但并未涵盖这个确切的主题。
答案 0 :(得分:7)
要部分更新用户资源而不是PATCH
,您是否考虑过PUT
来替换密码?
您的终端可能是/users/:id/password
,其中密码是用户资源的子资源。您更换密码的请求如下:
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"
}
答案 1 :(得分:1)
经过深入研究JSONPatch后,我能够提出将test
操作添加到补丁数据的方法。
这看起来有点像:
[
{ "op": "test", "path": "/password", "value": "oldPassword" },
{ "op": "replace", "path": "/password", "value": "newPassword" },
{ "op": "test", "path": "/password", "value": "newPasswordConfirm" }
]
使用此方法是否有任何问题?