完全RESTful(包括HATEOAS)客户端是否可以在客户端状态存储服务器提供的URI?

时间:2012-11-30 04:39:46

标签: rest hateoas

(注意:我假设使用URI来识别资源的REST服务,我知道这不是REST的严格限制)

根据我对HATEOAS的理解,客户端不应该假设服务提供的URI结构,除了初始入口点(而应该只使用服务器以结构化方式提供给它的URI)。这是否意味着客户端只能使用最新请求提供给它的URI,或者客户端是否可以跟踪来自同一会话的先前请求中收到的URI?如果是前者,后者违反哪个REST约束?

跟踪URI的两个例子:

  1. 在照片查看应用程序中,我遍历照片列表,将某些URI保存到列表中。然后,我导航到“Mosaic”功能,并将保存的URI中的所有照片加载到马赛克中。
  2. 我浏览了一个产品列表,并在我的客户端购物车中添加了一些产品。完成后,我在Orders资源中创建一个新元素,产品按其URI指定的顺序。

1 个答案:

答案 0 :(得分:3)

我不确定你的开场词是什么意思:

注意:我假设一个使用URI来识别资源的REST服务,我知道这不是严格的REST约束

你的意思是超链接不一定是URI吗?或者超链接不必指向资源?前者在技术上是正确的,但在互联网上,URI是唯一的超链接形式,所以除非你正在考虑完全不同的东西,否则它们就是URI。如果您说REST不要求URI识别资源,那么这是错误的。这正是他们在RESTful API中识别的内容。总是

无论如何,继续你的问题:

这是否意味着客户端只能使用最新请求提供给它的URI,或者客户端是否可以跟踪来自同一会话的先前请求中收到的URI?

是的,客户端可以缓存以前的回复。如果它们是“新鲜的”(根据Expires或max-age标题),则客户端可以立即使用它们。如果它们是“陈旧的”(超过最大年龄/到期时间),那么客户端可以使用条件请求(例如,If-Modified-Since)重新请求资源,但它不必。(/ p>

您的示例都没有构成REST违规。相反,它们都是系统简单性的精彩例子!