我正在开发一个小型REST API。我的数据库中有这个字段的用户资源:
{
email: String,
password: String,
first_name: String,
last_name: String,
age: Number,
location: String
}
当我查询特定用户资源时,出于安全原因,我将返回除password
字段之外的所有字段。
现在我想在客户端制作一个表单,以便用户可以更新他的个人信息和密码。更改密码表单将包含两个输入:old_password
和new_password
。
这是我的怀疑。我想要一个PUT方法,这样我就可以发送所有字段并更新用户。但old_password
和new_password
很少被填充,因此每次用户发出PUT请求时都无法将其发送到服务器。
将两个字段有时发送到PUT方法是否可以?是RESTful吗?
其他想法是使用具有该两个字段的PATCH方法并仅更新用户密码。但是我的PUT方法没有更新用户密码,而且没有正确使用它?
哪种方法最RESTful? 感谢。
答案 0 :(得分:1)
是,您可以在值不存在时设置默认值,或者使用服务器上的标志来检查该值是否存在。但是......,PUT必须向资源提供完整的对象。这样做的主要原因是PUT应该是幂等的。这意味着重复的请求应评估服务器上的相同结果。如果您允许部分更新,则不再具有同等效力。
使用PATCH方法可以部分更新结构。它提交对资源的部分修改。如果只需要为资源更新一个字段,则可能需要使用PATCH方法。
答案 1 :(得分:0)
我们解决了这个问题,创造了一个'密码'资源。此资源的URL可能如下所示:
/users/x/password
仅支持PUT
。任何其他请求都会导致405
错误。