Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用层次结构建模REST_Rest - Fatal编程技术网

用层次结构建模REST

用层次结构建模REST,rest,Rest,如何对分层的资源进行建模?例如,假设一个人有一个“留言板”,并且“消息”是一个资源。假设“消息”可以有回复,从而形成一个讨论线程。如何对线程的概念进行建模 “信息”中是否包括孩子?“线程”是自己的资源吗?最后,在这个实例中,什么样的RESTURI可以工作

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


“信息”中是否包括孩子?“线程”是自己的资源吗?最后,在这个实例中,什么样的RESTURI可以工作
#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}

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

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

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

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

例如,如果一条消息是对另一条消息的响应,它将在其内容中包含该消息

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

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

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


所有URI都可以遵循答案第一部分的内容,但这并不是必需的。

到目前为止,所有响应都不是完全平静的。REST不需要分层。只要有一个像/threads/这样的入口点,它提供每个线程资源的完整uri,每个线程资源都会使用每个消息本身的uri进行响应,或者顶部消息加上其回复的uri,依此类推。这些URI的生成方式无关紧要,只要它们可以从入口点通过超文本发现。

我希望/messages/{id}/reply包含回复的链接,而不是回复id——最好避免让客户端在可能的情况下构建URI。这是错误的。依赖URI命名约定与REST的所有内容背道而驰。您应该只有一个像/messages/这样的入口点,它将整个URI提供给响应中的其他消息资源,然后每个消息资源还应该向客户端发送每个回复消息资源的URI,等等。这一切都需要通过超文本来完成。我没有提到这一点,但我假设一个GET to/messages将以一个列表来响应所有消息(或线程,这是一个设计决策)。正如第一个例子所说,这将更好地包含回复的URI,因此客户端没有“URI命名约定”,正如您所说,我的响应只是关于如何在服务器中组织URI的建议。我所知道的所有服务器rest库都强制执行这种层次结构。对于如何回复邮件,您没有给出任何答案,因此您的回复不够完整和公平。但是,这是一个相当琐碎的问题,与如何在超文本中呈现适当的响应相比并不重要,这听起来好像OP并不理解。他实际上特别询问了如何使他的资源成为RESTful的——REST与URI格式无关。你的回答离题了,尽管他错误地问到了“RESTful URI”(这是一个不存在的概念)。为了澄清,如果你要调用API RESTful,你不能将URI定义为API的一部分。与其说一切都不是REST,不如说明REST是什么样子的?你不明白什么部分?如果你想让我向你解释REST,我建议你阅读菲尔丁的论文。不如提供一个例子吧?如果你想介绍REST,有几个关于stackoverflow的问题已经解决了。请参阅