将HTTP凭据作为资源标识符的一部分是一种好的做法吗?

将HTTP凭据作为资源标识符的一部分是一种好的做法吗?,http,rest,http-authentication,Http,Rest,Http Authentication,我正在设计一个需要HTTP基本或摘要身份验证的服务。我试图权衡使用HTTP凭据作为资源标识符一部分的利弊。假设每个经过身份验证的用户都有一个联系人列表。联系人是否应为: https://myservice.com/contacts 或者更确切地说: https://myservice.com/users/112358/contacts ? 在这种情况下,需要隔离用户。一个用户永远不需要访问联系人或与另一个用户相关的任何其他信息。出于这个原因,第一种方法看起来更干净,因为它只在URL中公开必要

我正在设计一个需要HTTP基本或摘要身份验证的服务。我试图权衡使用HTTP凭据作为资源标识符一部分的利弊。假设每个经过身份验证的用户都有一个联系人列表。联系人是否应为:

https://myservice.com/contacts
或者更确切地说:

https://myservice.com/users/112358/contacts
?


在这种情况下,需要隔离用户。一个用户永远不需要访问联系人或与另一个用户相关的任何其他信息。出于这个原因,第一种方法看起来更干净,因为它只在URL中公开必要的信息。另一方面,对于不同的HTTP凭据,
https://myserevice.com/contacts
将是一个不同的资源,我不确定这是一个好的设计。

我会选择
https://myservice.com/users/112358/contacts

如果只是因为“在”用户下可能有资源在某个点上可能被其他用户查看。例如,用户X能够查看用户112358的文档


URI的一致性是一个优势。即使使用URI中的一致性在外部并不是一个很大的问题,它也将有助于扩展和维护API的实现。

出于您在问题末尾引用的相同原因,
/contacts
将根据提供的凭据代表不同的资源,我建议您使用第二个,更长的选择。用户是否需要记住这些URL并将其键入浏览器?如果不是,长度和“漂亮”不应该是一个重要因素

别忘了,您可以随时从
/contacts
返回临时重定向到该用户自己的联系人