【问题标题】:Adding items to a resource restfully using OpenRasta使用 OpenRasta 轻松地将项目添加到资源
【发布时间】:2011-08-16 16:19:59
【问题描述】:

我正在使用 OpenRasta 创建一个调查应用程序。

我有一个 SurveyResource,可在 /surveys/{id} 访问并在 /surveys/{id}/edit 进行编辑

我现在想在调查中添加问题,因为这是调查的重点,但我不确定这样做最轻松的方式是什么以及如何在 OR 中进行设置。

我想我应该有一个 QuestionResource(包含问题类型、问题文本等的详细信息),它应该发布到 /surveys/{id}/questions 并由问题处理程序处理,但我可以不知道如何配置 OR。

我已将我的项目推送到 github,地址为 https://github.com/oharab/OpenSurvey/tree/add_question_to_survey

谁能帮帮我?

【问题讨论】:

    标签: rest architecture openrasta


    【解决方案1】:

    这取决于您要为资源建模的方式。您完全有可能永远不会明确提供对单个问题的访问权限,而是会修改整个调查文档,如下所示:

    PUT /surveys/123
    
    <survey>
    
      <link rel="update" href="/surveys/123" method="PUT"
            type="application/vnd.mycorp.survey+xml" />
    
      <question id="age">
        <label>How old are you?</label>
        <select>
          <option>0 - 5</option>
          <option>6 - 10</option>
          <option>10 - 13</option>
        </select>
      </question>
    </survey>
    

    如果你走这条路,你甚至可以为你的内容使用 HTML 或 HTML 5,这样它就很容易被客户使用。现在您只需一次修改整个调查文档。

    或者,您可能希望单独解决每个问题,给他们一个单独的 URI,我认为这就是您所说的,如下所示:

    GET /survey/123
    
    <survey>
      <link rel="add-question" href="/survey/123/questions"      
            type="application/vnd.mycorp.surveyquestion+xml" method="POST" />
    
      <question>
    
        <link rel="delete" href="/questions/123-age" method="DELETE" />
        <link rel="update" href="/questions/123-age" type="application/vnd.mycorp.surveyquestion+xml" method="PUT" />
    
        <label>How old are you?</label>
        <select>
          <option>0 - 5</option>
          <option>6 - 10</option>
          <option>10 - 13</option>
        </select>
      </question>
    </survey>
    

    这两者都不比另一个更 RESTful,区别仅在于调用的粒度。如果您需要后者的粒度,请为每个资源配置一个单独的处理程序,如

    using(OpenRastaConfiguration.Manual)
    {
       ResourceSpace.Has.ResourcesOfType<Survey>().AtUri("/survey/{id}").HandledBy<SurveyHandler>();
       ResourceSpace.Has.ResourcesOfType<Question>().AtUri("/questions/{id}").HandleBy<QuestionHandler>();
    }
    

    【讨论】:

    • 感谢您回复我。
    • 感谢您回复我。这更像是我想要的第一个选项,在提交完成的调查时,调查及其问题将只能通过调查 URI 访问,但我需要一次将问题添加到调查中,从而更改调查资源。
    • 附带说明,不建议使用随机 rels,也不建议将 rels 用作动词(这是通过后门重新引入 rpc)。 rel 属性用于描述当前链接指向的资源相对于该资源的内容。所以我也反对将链接@rel 用于形式(有方法)。即使更新链接变成了正确的形式,那么类型也应该是接受。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多