我正在使用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任何人都可以帮助我吗?
本
答案 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>();
}