我正在编写一个网站,希望在该网站中将其标记为已读,但无法找出最RESTful的方式。
显然,要检索该页面,客户端将发送一个GET请求,但是如果我然后将该页面标记为已读,则违反了GET应该是幂等的规则-它正在更改服务器上的某些内容。
有一个更好的方法吗?
最佳答案
读取状态是资源的固有部分,还是仅仅是服务器端跟踪工具?读者是否想获得所有“已读”或“未读”文档的列表?如果用户下载文档但决定以后再阅读,用户是否可以将其标记为“未读”?
如果只是服务器端,则可以在每个GET请求上将{user,resource}
元组标记为已读是很好的。如果每个用户的读取状态是资源的一部分,则需要在用户和资源之间进行客户端可写的多对多映射,并且该对将被映射(已读取)或未映射(未读取)。在这种情况下,我建议使用新资源来表示此状态,并允许客户端向该资源URI放置一个true / false布尔值。无论是user@host/resource/read
还是/user/{user}/resource/read
或其他名称,都没有关系。
如果您希望自动设置此标志,并且您的客户端是Web浏览器,则在文档下载后(可能在特定的时间段内可见该选项卡),您将需要使用AJAX发出第二个请求。