2009-01-21 100 views
3

如何模擬分層結構的資源?假設一個人有一個「留言板」,而一個「留言」是一種資源。假設「消息」可以有回覆,以便形成討論線程。如何模擬線程的概念?建模具有層次結構的REST

「消息」是否包含它的孩子? 「線程」是它自己的資源嗎?最後,在這種情況下什麼樣的REST URI可以工作?

回答

1

如果你認爲所有回覆的消息也訊息我想給一個ID,他們中的每一個,並使用這些URI:

#message {id} (only the message, no replies) 
/messages/{id} 

#replies to the {id} message (a list of the id's of the replies) 
/messages/{id}/replies 

要創建新的郵件做一個帖子到URI

/messages 

要創建一個消息(編號)的答覆做一個帖子

/messages/{id}/replies 

更新

我會在這裏修改我以前的答案。希望這次能以正確的Restful風格。

你有一個入口點uri,我們稱之爲{messages}。

GET {消息} - >所有消息,{MESSAGE1},{}消息2等的URI的列表

GET {MESSAGE1} - >響應與MESSAGE1文件,例如XML它可以be:

<message responses="{link to message1 responses}"> 
    <date>...</date> 
    <body>...</body> 
</message> 

{鏈接到message1響應}是客戶端必須遵循的鏈接,以獲取響應的uris列表。

如果消息是另一個響應,將包括在他的內容,例如

<message responses="{link to message1 responses}" inResponseTo="{uri}" > 
    <date>...</date> 
    <body>...</body> 
</message> 

我們增加新的消息只是其發佈到原{}的消息URI。如果該消息是對其他消息的響應,則只需將其包含在其內容中(請注意,這是將回復發布到特殊uri的原始答案的有效更改)。

修改一些消息做一個PUT到它的uri。

所有uris coudl都遵循答案的第一部分,但這不是必需的。

+0

我會/ messages/{id}/reply包含回覆鏈接而不是回覆id - 最好避免讓客戶端在可能的情況下構建URI。 – 2009-01-22 01:07:32

+0

你是絕對正確的...這是從休息時間前的壞習慣... – DaniCE 2009-01-22 01:11:51

1

到目前爲止,每個響應都不是RESTful。 REST不需要分層。只需要像/ threads /這樣的入口點,它提供每個線程資源的完整URI,每個線程資源都會響應每個消息本身的URI,或者頂部消息加上其答覆的URI等等。只要通過超文本從入口點發現這些URI,生成這些URI的方式就不重要了。