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