2012-05-29 48 views
9

有很多的討論,在那裏大約REST URI的設計,但沒有準確地回答了我的問題。REST URI設計的樹結構

比方說,我有一個包含任務和/或其他名單(名單=節點和任務=葉)某些列表。

我們可以有這樣的事

/lists/{id_list1}/lists/{id_list2}/lists/{id_list3}/tasks/{id_task1} 

,或者一個較短的版本:

/lists/{id_list1}/{id_list2}/{id_list3}/{id_task1} 

但是,我們真的很深的樹?

我還想着父/子關係,意思是說像

/lists/{id_list_parent}/{id_list_or_task_child} 

,但我覺得有什麼地方丟失......

什麼將是REST URI樹木巧妙的設計?

編輯

對不起,我遲到的回答!

所以我想我是混合2只需要:API的URI和瀏覽器的URI。

以下是我看到的東西:

在API方面,我只有兩個寫這些URI和讀取方法(末尾的「/ ID」不是必需的,對於創建實例) :

/lists/id 
/tasks/id 

在我的瀏覽器不過,我有這樣的事情:

/lists/id/lists/id/tasks/ 

只有第一部分(/列表/ ID)將由服務器,第二部分(名單進行解釋/ id/tasks /)wi我的客戶端JavaScript將使用它來查找從服務器收到的列表的子列表的任務。

你覺得這個辦法是什麼,也覺得事情錯了嗎?

+0

查看Git Hub上的url https://github.com/twitter/bootstrap/tree/master/docs/templates文件夾是節點,文件是葉子。我認爲它運作良好! –

+1

URI不是REST API的一部分。 REST是關於內容的,而不是URI。這應該讓您可以自由選擇一個URI組織,並在稍後進行更改。無論如何:你爲什麼需要/列表/ {id_list1} /列表/ {id_list2} /列表/ {id_list3} /任務/ {id_task1}?這看起來會導致帶有id 3的任務,因此無法將此任務縮減爲/ lists/{id_list3}/tasks以獲取任務列表,並且/ tasks/{id_task1}可用於列表中的任務? – jmclem

+0

感謝您的回覆,但我的問題並不確切,請參閱我上面的修改。 – greg3z

回答

0

使用URI來強制執行此約束似乎不正確。我會接受具有某種有效負載(JSON,XML等)的PUT請求。

PUT /tasklist

lists: [{ 
    id: 1234, 
    id: 12345, 
    tasks: [{ 
     id: foo, 
     id: bar, 
     id: baz 
    }] 
}] 

的網址似乎表明,你正在嘗試做的太多了這裏(恕我直言)通常情況下,您將與單個資源進行交互,而您的使用情況意味着您一次在多個上下文分層資源上進行操作。

10

是否有任何需要通過URI表示樹?當他們可以簡單地引用節點本身並且通過超媒體類型的鏈接建模關係時。

除此之外,我認爲是這樣的:

/lists/{nodeId}/children 

,它可以返回直接孩子家長的名單。

你也可以這樣做:

/lists/{nodeId}/children?depth=3 

,並在結果返回下三個層次的樹。

/lists/{nodeId}/children?depth=infinite 

可以從該節點返回整個分支。