在REST API中更改用户的密码

在REST API中更改用户的密码,rest,api,Rest,Api,我正在开发一个小型RESTAPI。我的数据库中有一个包含以下字段的用户资源: { email: String, password: String, first_name: String, last_name: String, age: Number, location: String } 当我查询特定的用户资源时,出于安全原因,我将返回除密码字段之外的所有字段 现在我想在客户端制作一个表单,这样用户就可以更新他的个人信息和密码。更改密码表单将有两个输入:旧密码和新密码

我正在开发一个小型RESTAPI。我的数据库中有一个包含以下字段的用户资源:

{
  email: String,
  password: String,
  first_name: String,
  last_name: String,
  age: Number,
  location: String
}
当我查询特定的用户资源时,出于安全原因,我将返回除
密码
字段之外的所有字段

现在我想在客户端制作一个表单,这样用户就可以更新他的个人信息和密码。更改密码表单将有两个输入:
旧密码
新密码

我的疑问来了。我想有一个PUT方法,这样我就可以发送所有字段并更新用户。但是
old_密码
new_密码
很少被填充,因此不能在用户每次发出PUT请求时将它们发送到服务器

  • 有时可以将这两个字段发送到PUT方法吗?它安静吗

  • 另一个想法是使用这两个字段的补丁方法,只更新用户密码。但是我的PUT方法没有更新用户密码,并且没有正确使用,对吗

哪一种是最安静的方法?
谢谢。

是的,当值不存在时,您可以设置默认值,或者使用服务器上的标志检查值是否存在。但是,PUT必须向资源交付完整的对象。这主要是因为PUT应该是幂等的。这意味着在服务器上重复的请求应该得到相同的结果。如果您允许部分更新,它将不再是idem-power


使用面片方法可以部分更新结构。它向资源提交部分修改。如果您只需要更新资源的一个字段,您可能需要使用补丁方法。

我们解决了这个问题,我创建了一个“密码”资源。指向此资源的url可能如下所示:

/users/x/password

仅支持
PUT
。任何其他请求都将导致
405
错误。

但有时您正在更新完整的资源,有时则不更新。这不是休息,对吧?好的。。因此,我需要有两种方法:放置以更新完整的资源和修补以仅更改密码。这是我的主要想法,但在PUT中,您没有发送密码,因此您没有更新完整的资源。可以吗?可以,只要不存在同一用户的多个条目即可。