我想提供重置用户密码的功能。这个调用显然不需要认证。首先我想到了这样的事情:
DELETE /users/{id}/password
:生成一个重置令牌,通过电子邮件发送给用户
POST /users/{id}/password
:需要新密码和正文中的有效重置令牌
但问题是,应用程序或网站无法向我提供用户的 ID,因为它只能要求用户提供他的电子邮件地址。
对我们的 API 有许多其他(未经身份验证的)调用,其中 ID 不存在,用户仅通过其电子邮件识别。
我们在团队中讨论了以下解决方案:
- 将 URL 中的 ID 替换为用户的电子邮件
- 从 URL 中剪下 ID,并为电子邮件提供查询参数
如果我必须在这两者之间进行选择,我会选择第一个,因为我认为为查询参数提供必要的东西不是 RESTful,因为它们总是代表一些可选的东西,比如过滤资源。是否有更好的方法来设计这些 URL,或者在 REST 约束方面用用户电子邮件替换 ID 就好了?