@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