我对REST原理相当熟悉,并已阅读相关论文,维基百科条目,一堆博客文章和有关此主题的StackOverflow问题,但仍未找到常见情况的直接答案:如何获取REST风格的只读vs可编辑资源?
我需要请求一个资源来显示。根据资源的状态,我需要呈现一个只读或可编辑的表示形式。在这两种情况下,我需要获取资源。我如何构建一个URL来获取只读或可编辑版本?
如果我的用户跟着GET /resource/<id>
的链接,那应该足以表明他/她需要只读表示。但是如果我需要将可编辑表单服务器起来,那么这个URL是什么样子的? GET /resource/<id>/edit
是显而易见的,但它在URL中包含一个动词。改为GET /resource/<id>/editable
解决了这个问题,但在表面上看似肤浅。这一切是否存在 - 将动词改为形容词?
如果我使用POST检索可编辑版本,那么如何区分最初检索它的POST与保存它的POST?我使用POST的(弱)借口是检索可编辑版本会导致服务器状态的变化:锁定资源。但是,只有我的要求是实施这样的锁定,情况并非总是如此。由于同样的原因PUT失败,加上PUT在我运行的Web服务器上默认没有启用,所以有实际的理由不使用它(和DELETE)。
请注意,即使在可编辑状态下,我还没有做任何更改;大概当我再次将资源提交给Web服务器时,我会将其发布。但为了让我可以稍后POST,服务器必须第一个提供一个特定的表示。
我想另一个办法是必须在集合级别不同的资源: GET /read-only/resource/<id>
和GET /editable/resource/<id>
或GET /resource/read-only/<id>
和GET /resource/editable/<id>
...但是这看起来很丑陋给我。
想法?
是的,我知道,这就是我的问题的关键。我给出了PUT和POST的例子,我认为这些方法不会起作用,即使我可以找到它们的边缘语义原因。所以,回到GET。我如何区分可编辑和不可编辑表示? – Val 2011-01-12 01:15:03
他们为什么会有不同? (在GET的情况下) – 2011-01-12 01:16:57
他们会有所不同,因为需要可编辑。这意味着我需要渲染一个表单。我需要知道我是否在表单中呈现请求的资源。我如何知道如何呈现资源? – Val 2011-01-12 01:21:51