REST服务调用启动工作流程?

时间:2013-11-07 18:11:34

标签: rest

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

在大多数情况下,我认为我们已经把事情弄得很清楚,但是有一个用例,我不确定它是否合适。

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

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

2 个答案:

答案 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。