我目前正在开发REST服务。该服务具有不同版本的实体,类似于维基百科文章。
现在我想知道如果为
我应该返回什么GET /article/4711
我应该使用(临时)重定向到当前版本,例如
GET /article/4711/version/7
或者我应该直接退回当前版本?使用重定向将大大简化HTTP缓存(使用Last-Modified),但具有重定向的缺点(额外请求,'更难'实现)。因此,我不确定这是否是一种好的做法。
分享的任何建议,建议或经验?
(顺便说一下:曾经尝试过搜索“REST版本”?你得到的一切都是关于API的版本而不是实体。所以如果这是重复的话,请耐心等待。)
答案 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
应该如何向
你会知道什么最适合你的模型,但你可以考虑使用标签
作为指针 <link rel="older"
type="text/html"
href="http://www.yourdomain.com/article/4711?version=6"/>
...
答案 4 :(得分:1)
我认为返回修订列表会更加安静:
GET /article/4711
你也可以:
GET /article/4711/current
直接返回当前版本。