Сделайте вызов API RESTful, который обновит много связанных объектов - PullRequest
2 голосов
/ 18 мая 2011

У нас есть модель, которая выглядит следующим образом

Login <- Email Addresses <- Person -> Teen

И хранимая процедура, которая берет некоторые свойства у teen, некоторые из person, а некоторые из Login, и создает нового teen, возвращающего сущность person.

С классической точки зрения RPC это легко ... просто предоставьте метод InsertTeen и вызовите хранимую процедуру.

Я пытался обернуть голову вокруг идеи RESTful о том, чтобы URL были моими ресурсами (существительными), а единственными действиями были действия HTTP (глаголы). Очевидно, что URL типа /api/InsertTeen совсем не является RESTful.

Но здесь я не имею дело с каким-либо конкретным ресурсом.

Единственное, что я могу здесь сделать, - это раскрыть такой ресурс, как insertTeenRequest.

Есть ли другие идеи о том, как это сделать? Я слишком большой фанатик?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Если вы хотите быть действительно RESTful, вы должны использовать несколько запросов к вашему API в этом случае. Например, сначала вы создаете Teen с POST для / api / teens /, затем создаете Person с POST для / api / people / и т. Д.

0 голосов
/ 18 мая 2011

Я довольно новичок в REST, но я думаю, что здесь вы бы использовали «POST» с телом запроса, содержащим данные, необходимые для создания «Teen», в любом формате, который вы используете, обычно в JSON или XML,Здесь я не уверен, относитесь ли вы к подросткам как к личностям с дополнительными свойствами, или подросток моделируется как само существо:

<person login="abc" email="abc@foo.com">
   <person-property-1>value1</person-property-1>
   <person-property-2>value2</person-property-2>
   <teen>
      <teen-property-1>value3</teen-property-1>
      <teen-property-2>value4</teen-property-2>
   </teen>
</person>

или

<teen login="abc" email="abc@foo.com">
   <person-property-1>value1</person-property-1>
   <person-property-2>value2</person-property-2>
   <teen-property-1>value3</teen-property-1>
   <teen-property-2>value4</teen-property-2>
</teen>

Что касается URI,Я считаю, что сегменты должны быть существительными, а не глаголами, поскольку URI должен адресовать ресурс, поэтому /api/teens, а не /api/InsertTeen.

/api/teens с HTTP GET вернет список всех подросткови /api/teens с HTTP POST вставит новый Teen.Чтобы завершить операции CRUD, /api/teens/{id} с использованием HTTP GET вернет определенного Teen, /api/teens/{id} с HTTP PUT обновит Teen, используя значения, переданные в теле запроса, а /api/teens/{id}, вызванный с помощью HTTP DELETE, удалитуказанный подросток.

Редактировать

Перечитайте ваш вопрос еще раз, и я могу неправильно понять.Если вы не относитесь к «подросткам» как к ресурсам, а только к «людям», то я бы рассмотрел /api/people с HTTP POST и, в зависимости от значений, передаваемых в теле запроса, делал все, что нужно для хранения.тот человек'.Итак, если запрос содержал значения «teen», вызовите вашу хранимую процедуру, которая создает «Teen» и возвращает «Person».

HTH

...