我们正在构建一个Web服务,并且正在尝试遵循REST准则。该服务允许用户创建和修改他们的帐户以及随之而来的个人资料(想想电子邮件偏好,地址等)。
在大多数情况下,我认为我们已经把事情弄得很清楚,但是有一个用例,我不确定它是否合适。
假设我们有一个呼叫/密码,用户可以在其中输出包含当前和所需密码的请求。这很好,但是我们正试图找出一个合适的调用来启动忘记密码工作流程,这会启动服务器上的某些操作,并且用户会收到有关如何继续操作的电子邮件说明。
由于资源应该是名词而不是动词,因此在URL中的某处添加/ forgotpassword是没有意义的。我们一直在考虑的一种方法是使用与更改密码相同的PUT,但使用不同的Content-Type / Accept标头来区分所需的结果。我对此感到满意,但我想知道其他一些选择可能是什么。
答案 0 :(得分:2)
如果您正在寻找名词,那么“密码恢复”链接关系怎么样可以作为恢复请求的用户下的集合? POST可以启动工作流程:
请求强>
POST /users/1/recovery-request
Content-Type: application/json
{
email: "foo@bar.com",
hint_question: 1,
hint_answer: "MyMother'sMaidenName"
}
<强>响应强>
204 No Content
这样做的好处是,有人能够轻松查询恢复集合,以查看重置密码的频率。
答案 1 :(得分:0)
最直接的方法是假设对/password
的DELETE请求是重置密码的请求。它应该返回202 Accepted响应,并且它应该发出GET信号,直到密码重置工作流程完成或超时。
除非/password
表示返回其当前和以前的密码,否则用户不应该执行包含当前和所需密码的PUT请求。 PUT是完全替代品。如果该密码是用户用于对您的服务进行身份验证的密码,则应该使用Authorization标头。如果没有,那么你不应该使用PUT并使其成为POST。