RESTful检查用户名、电子邮件等可用性的方法

9

我最近非常热衷于尽可能地以RESTful的方式思考,但在非明显的路由方面遇到了困难。

在这种情况下,我想知道检查用户、或其他需要唯一性的内容(如电子邮件)的用户名可用性的RESTful方法。

我的直觉告诉我,我会想要在/users/email/users/username/ 上执行GET,每个都有一个必需参数,或者类似于GET /users/search/ 的内容,其中emailusername是可选参数。如果收到200,则usernameemail不可用;如果收到404,则可用。

我更喜欢第一种选择,因为它更加明确,但并不像我已经仔细研究过Roy Fielding的论文那样了解该怎么做。

这里最合理的方法是什么?

4个回答

7
第一种方法似乎更符合“RESTful”的要求。您尝试通过用户名或电子邮件获取特定资源,并在存在时获取它,否则返回状态消息“不可用资源”。这将是:
  • GET /users/username/johnwayne (以“获取”johnwayne资源/用户名可用性为例...)

这应该生成:

  • 200:如果资源存在
  • 404:如果资源不存在
第二种方法更像是“SOAP”式的Web服务,其中您使用一些“参数”(用户名、电子邮件)定义一个“函数”(/users/search/)。

我更改了它们,因为如果资源存在,则不可用。如果不存在,则可用。 - Josh Smith
1
抱歉(我会编辑我的回答)...我没有以那种方式“阅读”,你的意思是如果用户名可用,则返回“200”...我理解了,但根据GET资源的语义有点令人困惑。也许你应该考虑在客户端处理它,即在客户端中检查资源是否不可用,如果用户名可用,则可以创建它...但这是我的解释,我认为有很大的解释空间 :) - emgsilva

1

对于唯一字段,第一个选项是很好的选择(/users/email或/users/username/),对于非唯一字段,搜索更加适合。


0
我建议您使用 HEAD 请求而不是 GET。
使用 GET 可能会带来安全问题。黑客可以使用组合来识别有效的用户名,因为 GET 要么返回 200,要么返回 404。

0

你应该尝试通过电子邮件获取用户列表

GET /users?query=asd@gmail.com

在这里,你可以找到1个或0个项目。在第一种情况下,地址不是唯一的。在另一种情况下,它是唯一的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接