使用OpenRasta重新添加项目到资源

时间:2011-08-15 13:10:41

标签: rest architecture openrasta

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

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

进行编辑

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

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

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

的github

任何人都可以帮助我吗?

1 个答案:

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