代码之家  ›  专栏  ›  技术社区  ›  Luke Foust

用层次结构建模REST

  •  3
  • Luke Foust  · 技术社区  · 16 年前

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

    “信息”中是否包括孩子?“线程”是自己的资源吗?最后,在这个实例中,什么样的RESTURI可以工作?

    2 回复  |  直到 16 年前
        1
  •  1
  •   DaniCE    15 年前

    如果你认为对消息的所有回复都是消息,我会给每个人一个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
    

     /messages
    

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

    /messages/{id}/replies
    

    使现代化

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

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

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

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

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

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

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

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

        2
  •  1
  •   aehlke    15 年前

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