我目前正在编写自己的REST API。我的一个端点名为/api/profile
,要么GET
要检索,要么PUT
更新此配置文件。我被告知,在调用PUT /api/profile
时,在网址中不包含任何形式的用户ID,电子邮件或用户名,这被视为不良做法或明显错误。每个请求都有一个用于身份验证的承载令牌,这使得服务器加载用户并将其存储在请求数据中。在使用PUT更新信息后,我认为可以安全地假设,如果没有为URL提供参数,则目标是self
,在这种情况下,是经过身份验证的用户。
我做错了这个假设和/或这是REST的坏例子吗?
答案 0 :(得分:2)
REST的架构限制之一是使您的资源可缓存。
如果客户端和服务器之间有某个代理或其他缓存,则无法缓存请求行GET /api/profile
,或者其他用户可能会检索错误的配置文件。
您可以在案例中使用Vary: Authorization
标头来阻止此情况。但是在URL中使用id将明确地清楚要检索哪个资源。
对于PUT
请求,这不是问题,因为它们不会被缓存,但您应该保持URI设计的一致性。