使用层次结构建模REST

时间:2009-01-21 22:06:54

标签: rest

如何建模分层的资源?例如,假设一个人具有“留言板”并且“消息”是资源。假设“消息”可以有回复,以便形成讨论线程。如何模拟线程的概念?

“消息”是否包含它的孩子? “线程”是它自己的资源吗?最后,在这个实例中,哪种REST URI可以使用?

2 个答案:

答案 0 :(得分: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

要创建对邮件{id}的回复,请发帖

/messages/{id}/replies

更新

我将在此修改我以前的答案。希望这次能以正确的宁静风格。

你有一个入口点uri,我们称之为{messages}。

获取{讯息} - >所有消息的uris列表,{message1},{message2}等

获取{message1} - >使用message1文档进行响应,例如在xml中它可以是:

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

{link to message1 answers}是客户端必须遵循的链接,以获取响应的uris列表。

如果某条消息是对另一条消息的回复,则会在其内容中包含该消息,例如

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

现在添加新消息,只需将其发布到原始的{messages} uri。如果该消息是对其他消息的响应,则仅将其包含在其内容中(请注意,这是对您发布对特殊uri的回复的初始答案的有效更改。)

要修改某些消息,请执行PUT到其uri。

所有的uris coudl都遵循答案第一部分的内容,但这不是必要的。

答案 1 :(得分:1)

到目前为止,每个响应都没有RESTful。 REST不需要是分层的。只需要一个像/ threads /这样的入口点,它给出了每个线程资源的完整URI,每个线程资源都会响应每个消息本身的URI,或者顶层消息加上其回复的URI,依此类推。生成这些URI的方式并不重要,只要它们可以通过入口点的超文本发现。