Каноническая техника для размещения массива объектов с помощью REST - PullRequest
1 голос
/ 03 февраля 2012

Спасибо, что нашли время, чтобы прочитать это.Я просмотрел Stack Overflow и не увидел аналогичного вопроса, но если я пропустил один, я извиняюсь.

Итак, я создаю RESTful API вместе с пользовательским интерфейсом, который является (первым) потребителемсказал REST API.

У меня есть необходимость создать объект.Создание этого объекта требует приличного количества конфигурации.

Я понимаю о глаголе, который мне нужно использовать (POST - давайте не будем спорить, этот пункт) и пути URL, который мне нужен.Мой вопрос о том, как настроить параметры.Позвольте мне дать вам пример объекта конфигурации в формате JSON, чтобы он был независимым:

    { 
     name: "foo",
     barid:1, 
     features:[
        {
         id:1, 
         config: {
            foo:bar, 
            fubar:baz
         } 
        }, 
        {
         id:2, 
         config: {
            foo:bar, 
            fubar:baz
         }
        },... 
    ]  
   }

Итак, что мне интересно, так это ... какой правильный способ POST для параметра features?Должен ли я просто сделать «функции» строкой JSON и десериализовать ее на стороне сервера?Есть ли какое-то соглашение, которое вы соблюдаете для создания массива вложенных объектов в RESTful POST?Другим разработчикам придется использовать это, и я, конечно же, не хочу, чтобы люди вручную создавали то, что jQuery делал с моим объектом JSON, который выглядел так:

features[0][featureid]:2
features[0][configuration][min]:-64
features[0][configuration][max]:50
features[0][include]:true
features[1][featureid]:3
features[1][configuration][min]:0
features[1][configuration][max]:80.5
features[1][include]:true

Моё приложение grails не делало 'мне это очень нравится:)

Еще раз спасибо за ваше время.

1 Ответ

2 голосов
/ 03 февраля 2012

Grails может принимать такие параметры, как features[0].featured=2&features[0].configuration.min=-64, но вы должны подготовить пустой массив структур и объектов перед фактическим отображением.Это будет:

import org.apache.commons.collections.ListUtils
import org.apache.commons.collections.Factory

class DataCommand {

  String name

  List features = = ListUtils.lazyList([], {
      new FeatureCommand(
          configuration: new ConfigurationCommand()
      )
  } as Factory)

}

+

class FeatureCommand {
    int featured
    ConfigurationCommand configuration
}

class ConfigurationCommand {
    int min
    int max
}

lazyList создает элементы списка по требованию.Если вы точно знаете количество функций - вы можете заполнить их вручную без использования lazyList.

Кстати, это также хороший способ POST / PUT фактического JSON в теле на сервер вместо параметров запроса.Это способ BackboneJS по умолчанию, например.Таким образом, вы сможете самостоятельно анализировать входящий JSON, сопоставлять его с теми же командами (требуется небольшая настройка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...