【发布时间】:2010-10-02 19:20:55
【问题描述】:
如何对分层的资源进行建模?例如,假设一个人有一个“留言板”并且“消息”是一种资源。假设“消息”可以有回复,从而形成一个讨论线程。如何为线程的概念建模?
“消息”是否包括它的孩子? “线程”是它自己的资源吗?最后,什么样的 REST URI 可以在这种情况下工作?
【问题讨论】:
标签: rest
如何对分层的资源进行建模?例如,假设一个人有一个“留言板”并且“消息”是一种资源。假设“消息”可以有回复,从而形成一个讨论线程。如何为线程的概念建模?
“消息”是否包括它的孩子? “线程”是它自己的资源吗?最后,什么样的 REST URI 可以在这种情况下工作?
【问题讨论】:
标签: rest
如果您认为对消息的所有回复也是消息,我会给每个回复一个 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
更新
我将在这里修改我之前的答案。希望这次是正确的 Restful 风格。
你有一个入口点 uri,我们称之为 {messages}。
GET {messages} -> 所有消息的 uri 列表,{message1}、{message2} 等。
GET {message1} -> 响应 message1 文档,例如在 xml 中它可能是:
<message responses="{link to message1 responses}">
<date>...</date>
<body>...</body>
</message>
{link to message1responses} 是客户端必须遵循的链接才能获取响应的 uri 列表。
如果一条消息是对另一个消息的响应,它将包含在他的内容中,例如
<message responses="{link to message1 responses}" inResponseTo="{uri}" >
<date>...</date>
<body>...</body>
</message>
现在要添加新消息,只需将其发布到原始 {messages} uri。如果消息是对其他消息的响应,只需将其包含在其内容中(请注意,这是对您将回复发布到特殊 uri 的初始答案的有效更改)。
要修改某些消息,请对其 uri 执行 PUT。
所有 uris 都可以遵循答案第一部分的内容,但这不是必需的。
【讨论】:
到目前为止,每个响应都不是 RESTful 的。 REST 不需要是分层的。只需有一个像 /threads/ 这样的入口点,它提供每个线程资源的完整 URI,每个线程资源将使用每条消息本身的 URI 或顶部消息加上其回复的 URI 等进行响应。只要可以从入口点通过超文本发现这些 URI,生成这些 URI 的方式并不重要。
【讨论】: