1

我们正在构建 Web 服务并尝试遵循 REST 准则。该服务允许用户创建和修改他们的帐户以及随之而来的个人资料(想想电子邮件偏好、地址等)。

在大多数情况下,我认为我们已经把事情搞定了,但是有一个用例我不确定是否合适。

假设我们有一个调用 /password ,用户可以在其中 PUT 一个包含他们当前和所需密码的请求。这很好,但我们正在尝试找出一个适当的调用来启动忘记密码的工作流程,这会在服务器上启动一些操作,并且用户会收到有关如何继续的电子邮件的说明。

由于资源应该是名词而不是动词,因此在 URL 的某处添加 /forgotpassword 没有意义。我们一直在考虑的一种方法是使用与更改密码相同的 PUT,但使用不同的 Content-Type / Accept 标头来区分所需的结果。我对此没意见,但我想知道其他一些选择可能是什么。

4

2 回答 2

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

这样做的好处是有人能够轻松地查询恢复集合以查看您重置密码的频率。

于 2013-11-07T22:35:59.780 回答
0

最直接的方法是假设对您的 DELETE 请求/password是重置密码的请求。它应该返回 202 Accepted 响应,并且 GET 应该向它发出信号,直到密码重置工作流程完成或超时。

用户不应执行包含当前和所需密码的 PUT 请求,除非/password表示返回其当前和以前的密码。PUT 是一个完整的替代品。如果该密码是用户用来对您的服务进行身份验证的密码,那么您应该期待一个 Authorization 标头。如果不是,那么您不应该使用 PUT 并将其设为 POST。

于 2013-11-07T18:47:02.267 回答