在Restful URIs中包括电子邮件

3
在我的应用中,我有包含用户ID的URI来识别用户私有资源。而用户ID是电子邮件,例如:
/users/user2@example.com/private-resource

将电子邮件放在URI中,包括像.@这样的字符,是一个好的做法吗?还是应该使用其他类型的用户ID,例如哈希值?


我认为选择权在你手中。个人而言,我会使用更安全的用户身份验证方法,例如在创建用户时对电子邮件进行MD5加密,然后将其用作唯一标识符。 - Justin Erswell
3个回答

4
如果电子邮件可以作为固定标识符的功能,那就可以了。
问题在于大多数应用程序都允许用户更改电子邮件;在这种情况下,通过使用代理键自己控制ID空间会更加牢固。(因为电子邮件(如果用户可以更改它们)不是身份,而只是资源的属性)。
另一个反对电子邮件的论点是——正如@Rob所指出的——潜在的安全问题。

好的,你说得对,电子邮件可能不是不可变的,而且它还是敏感数据,使用代理键是最好的选择。如果我实现了代理键,那么如果用户不知道他的代理键,如何让他访问自己的个人资料(即在/users/{userid}上进行GET请求)?RESTful无状态语义要求避免像/users/myprofile这样的URI。 - user1781028
@user1781028,您可以让用户输入/users/{email},然后返回一个HTTP 302,其中/users/{id}作为位置;如果用户不存在,则返回404。 - miku

1

这个没有问题...只要确保对适当的字符进行URL编码即可。

(电子邮件是比较敏感的信息,如果URL被传播,您可能需要传递哈希或代理键来保护用户的电子邮件地址。)


0

虽然在URI中使用'-'是完全可以的,但是不建议使用'@'和'#'。

然而,只要电子邮件ID是一个ID,例如http://example.org/user/mail/{email}/1234,那么就没问题了。


1
抱歉,但是从http://www.w3.org/Addressing/URL/uri-spec.html上得知,`@`被认为是一个*安全*字符 - 与$ | - | _ | @ | . | & | + | -一起。 - miku

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