Добавление элементов в ресурс с помощью OpenRasta - PullRequest
0 голосов
/ 15 августа 2011

Я использую OpenRasta для создания приложения Survey.

У меня есть SurveyResource, доступный по адресу / surveyys / {id} и редактируемый по адресу / surveyys / {id} / edit

Теперь я хотел бы добавить вопросы к опросу, так как в этом и заключается смысл опроса, но я не уверен, что наиболее спокойный способ сделать это и как настроить его в ИЛИ.

Я думаю, что у меня должен быть QuestionResource (который содержит подробную информацию о типе вопроса, тексте вопроса и т. Д.), И он должен быть опубликован в / surveyys / {id} / questions и обработан обработчиком вопросов, но я не могу 'не могу понять, как настроить ИЛИ.

Я перенес свой проект на github на https://github.com/oharab/OpenSurvey/tree/add_question_to_survey

Кто-нибудь может мне помочь?

Бен

1 Ответ

1 голос
/ 16 августа 2011

это зависит от того, как вы хотите моделировать свои ресурсы.Вполне возможно, что вы никогда не предоставите явно доступ к одному вопросу и изменили бы весь документ опроса, например:

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 или HTML5 для вашего контента, так что его легко потреблять клиенты.Теперь вы просто изменяете весь документ опроса сразу.

В качестве альтернативы, вы можете захотеть отдельно ответить на каждый вопрос, задав ему индивидуальный 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>();
}
...