9

我最近非常想尽可能 RESTful 地思考,但我发现自己被不明显的路线所阻碍。

在这种特殊情况下,我很好奇 RESTful 方式来检查用户的用户名和电子邮件可用性,或任何其他具有唯一性的东西。

我的直觉告诉我,我想执行 a GETon/users/email/users/username/each 带有必需的参数,或者类似于带有 and 的可选GET /users/search/参数的东西。如果您得到 a ,则or不可用;如果你得到一个,那么它是可用的。emailusername200usernameemail404

我更喜欢第一个选项,因为它更明确,但这并不像我已经仔细研究过 Roy Fielding 的论文以充分了解该做什么。

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

4

4 回答 4

7

第一种方法似乎更“RESTful”。您尝试获取特定资源(通过用户名或电子邮件)并获取它(如果存在)或获取状态消息“不可用资源”。这将是:

  • GET /users/username/johnwayne(“获取”johnwayne 资源/用户名可用性...)

这应该生成:

  • 200:如果资源存在
  • 404:如果资源不存在

第二个似乎更像是“SOAP”-like web 服务,您可以在其中定义一个带有一些“参数”(用户名、电子邮件)的“函数”(/users/search/)......

于 2013-08-18T17:58:33.227 回答
1

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

于 2013-08-19T00:34:37.037 回答
0

我建议您使用 HEAD 请求而不是 GET。

使用 GET 可能会带来安全问题。黑客可以使用组合来识别有效的用户名,因为 GET 会导致 200 或 404。

于 2016-06-10T14:08:49.087 回答
0

您应该尝试通过以下方式获取包含邮件的用户列表

GET /users?query=asd@gmail.com

在这里您可以找到 1 件或 0 件。在第一种情况下,地址不是唯一的。在另一个 - 它是独一无二的

于 2016-06-10T14:32:31.473 回答