@ray,精彩讨论
@jgerman,不要忘了,只是因为它的休息,并不意味着资源必须在石头从POST设置。
你选择资源的任何给定的表示,包括什么是你的。
你单独引用的盖的情况下,仅仅是一个父资源(连环画),其子资源(套),可进行交叉引用的创建。例如,您可能还希望单独提供作者,发布者,角色或类别的参考。您可能希望单独创建这些资源,或者在将其引用为儿童资源的漫画书之前创建这些资源。或者,您可能希望在创建父资源时创建新的子资源。
您的封面的具体情况稍微复杂一点,因为封面确实需要漫画书,反之亦然。
但是,如果您将电子邮件视为资源,并将发件人地址视为子资源,则显然仍然可以单独引用发件人地址。例如,获取全部地址。或者,使用以前的地址创建一条新消息。如果电子邮件是REST,您可以很容易地看到许多交叉引用的资源可用:/ received-messages,/ draft-messages,/ from-addresses,/ to-addresses,/ addresses,/ subjects,/ attachments/folders ,/ tags,/ categories,/ labels等。
本教程提供了交叉引用资源的一个很好的例子。 http://www.peej.co.uk/articles/restfully-delicious.html
这是自动生成数据最常见的模式。例如,您不会发布新资源的URI,ID或创建日期,因为它们是由服务器生成的。但是,当您获取新资源时,您可以检索URI,ID或创建日期。
二进制数据的例子。例如,您想要将二进制数据作为子资源进行发布。获取父资源时,可以将这些子资源表示为相同的二进制数据,或表示二进制数据的URI。
表格&参数已经不同于资源的HTML表示形式。发布导致URL的二进制/文件参数不是一个延伸。
当您获取新资源(/ comic-books/new)的表单或获取表单以编辑资源(/ comic-books/0/edit)时,您需要获取特定于表单的表示的资源。如果使用内容类型“application/x-www-form-urlencoded”或“multipart/form-data”将资源发布到资源集合,则要求服务器保存该类型表示。服务器可以用保存的HTML表示或其他任何方式进行响应。
为了API或类似的目的,您可能还希望允许将HTML,XML或JSON表示发布到资源集合。
也可以按照您的描述来表示您的资源和工作流程,同时考虑到在漫画书后发布的封面,但要求漫画书有封面。示例如下。
- 允许延迟封面创作
- 允许漫画创作与需要盖
- 允许盖是交叉引用
- 允许多个井盖
- 创建漫画书草案
- 创建漫画书草案封面
- 发布漫画书
GET /漫画书
=> 200好的,获取所有漫画书。
GET /漫画书/ 0
=> 200行,带盖(/ cover/1,/ covers/2)获取漫画书(id:0)。
GET/comic-books/0/covers
=> 200 OK,获取漫画书封面(id:0)。
GET/covers
=> 200 OK,获取全部封面。
GET/covers/1
=> 200 OK,用漫画书(/ comic-books/0)获取封面(id:1)。
GET /漫画书/新
=> 200确定,获取表单以创建漫画书(表单:POST /漫画书)。
POST /草稿漫画书
名称= foo
笔者=嘘声
出版商=咕
公布= 2011-01-01
=> 302找到了,地点:/草稿漫画书/ 3,重定向到带有封面的漫画书(id:3)(二进制)。
GET /选秀漫画图书/ 3
=> 200 OK,获取草拟漫画书(ID:3)的封面。
GET/draft-comic-books/3/covers
=> 200 OK,获取草稿漫画书封面(/ draft-comic-book/3)。获取/漫画书/漫画书/ 3)(表格:POST/draft-3)漫画书/ 3 /套)。
POST /草案-漫画书/ 3 /覆盖
cover_type =前
cover_data =(二进制)
=> 302实测值,位置:/草案-漫画书/ 3 /盖,重定向到新漫画书封面(/ draft-comic-book/3/covers/1)。获取表格发布漫画书(id:3)(表单:POST/published-comic-books)。
POST /出版-漫画书
名称= foo
作者=嘘声
出版商=咕
出版= 2011-01-01
cover_type =前
cover_data =(二进制)
= > 302找到,位置:/漫画书/ 3,重定向到带封面的漫画书(ID:3)。
确实使用[RESTFUL SERVICE DISCOVERY](http://barelyenough.org/blog/2008/01/restful-service-discovery-and-description/)吗? – treecoder
我试图坚持HATEAOS,在我看来,这与使用类似的东西背道而驰,但我会看看。 – jgerman
同样精神的不同问题。然而,所有权与您提出的解决方案(问题中的问题)不同。 http://stackoverflow.com/questions/20951419/what-are-best-practices-for-rest-nested-resources – Wes