4

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

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

跟踪 URI 的两个示例:

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

1 回答 1

3

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

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

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

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

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

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

您的两个示例均不构成 REST 违规。相反,它们都是系统简单性的绝佳例子!

于 2012-11-30T16:31:00.420 回答