【问题标题】:RESTful URL design for unauthenticated requests针对未经身份验证的请求的 RESTful URL 设计
【发布时间】:2014-04-07 20:50:26
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: rest url-design


    【解决方案1】:
    POST /passwordResets
    {
        "emailAddress": "bob@example.com"
    }
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2020-08-18
      • 2021-07-05
      • 2014-11-15
      • 2021-05-26
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多