REST:我应该重定向到实体的版本URL吗?

时间:2010-04-02 16:36:00

标签: rest http-caching

我目前正在开发REST服务。该服务具有不同版本的实体,类似于维基百科文章。

现在我想知道如果为

我应该返回什么
GET /article/4711

我应该使用(临时)重定向到当前版本,例如

GET /article/4711/version/7

或者我应该直接退回当前版本?使用重定向将大大简化HTTP缓存(使用Last-Modified),但具有重定向的缺点(额外请求,'更难'实现)。因此,我不确定这是否是一种好的做法。

分享的任何建议,建议或经验?

(顺便说一下:曾经尝试过搜索“REST版本”?你得到的一切都是关于API的版本而不是实体。所以如果这是重复的话,请耐心等待。)

5 个答案:

答案 0 :(得分:11)

如果您将版本视为实体(根据它的外观),这就是我的建议:

GET /article/4711

返回所有版本的列表(以及指向它们的链接)。这使得/article/4711成为一个容器实体。

GET /article/4711/latest

返回最新版本的内容。您可能需要考虑/version/latest以符合以下内容。

GET /article/4711/version/7

返回文章的特定版本。

答案 1 :(得分:2)

取决于GET /article/4711的预期行为。如果要始终指向最新版本,则应直接返回最新版本。重定向到特定版本似乎有问题,因为您依赖用户/客户端库将来不会访问该特定URL。要翻译成HTML术语,用户可能会为version/7网址添加书签,并会惊讶于他们现在正在访问旧版本,而不是他们最初在地址栏中输入的最新版本。

答案 2 :(得分:2)

您可能需要查看http://tools.ietf.org/html/draft-brown-versioning-link-relations

使用CMIS链接关系和HTTP链接标题,您可以使/ article / 4711成为最新版本,并提供指向版本的链接,例如:链接:< / article / 4711 / versions&gt ;; rel =版本历史

答案 3 :(得分:2)

文章版本和超文本

如果您真的担心使界面RESTful,那么您应该考虑如何以 HATEOS 样式执行此操作。

在我看来,这意味着返回足够的信息,用户可以浏览您实体的修订列表。如果你从罗伊那里读到这个......

“不需要发现接口。它在超文本中定义。表示告诉客户端如何组合到下一个应用程序状态的所有转换”

...您会了解GET /article/4711应该如何向

返回足够的信息
  1. 获取该文章的最新版本

  2. 获取下一个/上一个版本

  3. 你会知道什么最适合你的模型,但你可以考虑使用标签

    作为指针
      <link rel="older"
            type="text/html"
            href="http://www.yourdomain.com/article/4711?version=6"/>
    

    ...

答案 4 :(得分:1)

我认为返回修订列表会更加安静:

GET /article/4711

你也可以:

GET /article/4711/current

直接返回当前版本。