0

我想提供重置用户密码的功能。这个调用显然不需要认证。首先我想到了这样的事情:

DELETE /users/{id}/password:生成一个重置令牌,通过电子邮件发送给用户

POST /users/{id}/password:需要新密码和正文中的有效重置令牌

但问题是,应用程序或网站无法向我提供用户的 ID,因为它只能要求用户提供他的电子邮件地址。

对我们的 API 有许多其他(未经身份验证的)调用,其中 ID 不存在,用户仅通过其电子邮件识别。

我们在团队中讨论了以下解决方案:

  • 将 URL 中的 ID 替换为用户的电子邮件
  • 从 URL 中剪下 ID,并为电子邮件提供查询参数

如果我必须在这两者之间进行选择,我会选择第一个,因为我认为为查询参数提供必要的东西不是 RESTful,因为它们总是代表一些可选的东西,比如过滤资源。是否有更好的方法来设计这些 URL,或者在 REST 约束方面用用户电子邮件替换 ID 就好了?

4

1 回答 1

0
POST /passwordResets
{
    "emailAddress": "bob@example.com"
}

然后,您还可以灵活地通过 userId 进行重置,并且您可以像任何其他资源一样跟踪重置以进行审计。

在您的两个选项中,如果您可以使用电子邮件地址来唯一标识用户,那么第一个选项并不糟糕。但是,这在概念上是错误的,因为每个资源都应该有一个规范位置,而现在您有两个 -/users/bob/password/users/bob@example.com/password.

第二个选项是错误的。/users/password没有意义。/users 的直接含义是下一个路径元素是用户。/users/password比 REST 更接近 RPC。

于 2014-04-08T00:12:46.723 回答