#rest #grails #grails-orm
#rest #grails #grails-orm
Вопрос:
Итак, мы начинаем с grails в нашей компании и создаем это приложение, которое использует ExtJS в качестве интерфейса и Grails во внутренней части.
Поскольку ExtJS работает исключительно с JSON для заполнения таблиц данных и тому подобного, перед нами стоит задача создания этих интерфейсов, которые будут отправлять и получать объекты JSON в ExtJS в restful режиме.
После обсуждения нашей модели домена мы остановились на одном. Вскоре мы поняли, что некоторые таблицы в системе будут состоять из информации из нескольких объектов домена.
После некоторых поисков мы нашли JSON RESTful API для плагина GORM, который в основном предоставляет RESTful интерфейс для любого заданного объекта домена.
Это подводит нас к основной сути вопроса.
На мой взгляд, есть два способа продолжить.
1) Создайте контроллер, специфичный для каждой таблицы данных в ExtJS, который будет выполнять различные действия, и в рамках каждого действия он будет создавать или получать объект JSon для выполнения CRUD для различных объектов домена, используемых таблицей данных.
На мой взгляд, это заняло бы больше времени. В любом случае, это вариант.
2) Другой вариант заключается в использовании вышеупомянутого плагина путем создания «составного» объекта домена, специфичного для datatable, который мы хотим заполнить (каждый атрибут в этом объекте является столбцом в datatable). После этого просто предоставьте его с помощью плагина JSON RESTful API для GORM, который в основном выполняет за нас все действия CRUD.
Есть ли вообще способ создать объект, подобный тому, который мы хотим в нашей модели домена, фактически не создавая больше таблиц базы данных в серверной части?
Я считаю, что мы на правильном пути, нам просто нужно немного рекомендаций от экспертов 🙂
заранее спасибо!
Ответ №1:
Интересно.
В итоге я использовал другой подход, дайте мне знать, что вы думаете.
В принципе, в итоге мы использовали этот плагин: http://grails.org/plugin/json-rest-api предоставить класс домена и позаботиться обо всех операциях CRUD.
Что мы сделали, так это создали пользовательский маршаллер JSON для каждого класса, вот так.
Bootstrap.groovy
[...]
JSON.registerObjectMarshaller(Person){
def returnArray = [:]
returnArray['id'] = it.id
returnArray['name'] = it.name
returnArray['street'] = it.address.street
return returnArray
}
Person.groovy
//the plugin exposes the class with this
static expose = ['person']
String name
Address address
[...]
Маршаллер фактически воздействует на то, как класс будет преобразован при вызове метода «как JSON».
Итак, теперь, благодаря плагину, мы можем сделать
GET http://mydomain.com/api/person
и мы получаем объект json, который содержит информацию от person и других классов, подобных этому:
{"data":{"id":"1", "name":"Peter", "Spooner St"}}
Единственное, что нам теперь нужно выяснить, как обновить уличный адрес с помощью update или create, если это возможно.
Мысли?
Ответ №2:
В вашем случае я бы рекомендовал создать набор командных объектов и контроллеров, которые их обрабатывают. Это элегантно позволит использовать ваш «составной» подход.
Командный объект — это класс, который обладает всеми классными возможностями проверки и привязки данных, которые есть у объектов домена, но без прямого сохранения.
Ссылки для проверки:
Комментарии:
1. Интересно… позвольте мне прочитать об этом. В ответах я предложил другое решение, дайте мне знать, что вы думаете.