У меня нет готового решения вашей проблемы, и я не верю, что оно есть.Я просто объясню решение, которое я использую, и то, что я рассмотрю в вашем случае.
В моей организации наш подход состоит в том, чтобы разделить наши приложения во внутреннем интерфейсе Grails и внешнем интерфейсе во Flex.Причина в том, что у нас есть много готовых к использованию компонентов Flex, для которых потребуется много времени для повторной реализации с использованием чистых веб-технологий, но это не моя точка зрения.
Создание серверной части REST в Grails выполняется быстро, поскольку представления создаются по мере необходимости, контроллеры просты и проверка входных данных значительно упрощается из-за ограничений домена.
Недостаток этого разделенияэто определение доменных объектов должно быть продублировано во внешнем интерфейсе.Вы можете включить проверку объектов в интерфейс или нет, но если вы их опустите, это повлияет на скорость отклика пользовательского интерфейса (запросы к REST-интерфейсу в AJAX требуют проверки в реальном времени дляполучить ошибки).В конце концов, наше приложение довольно громоздко, потому что изменение объектов в бэкэнде подразумевает изменение в интерфейсе.Кроме того, мы выполняем проверку как во внешнем интерфейсе, так и во внутреннем, и этот код не используется совместно, поэтому он должен оставаться в фазе и поддерживаться в двух местах.
Наши приложения разбиты таким образом, чтопохож на два совершенно разных приложения Grails, которые не разделяют код.Решение, которое будет работать в вашем случае, но не совсем то, что вы ищете.
В вашем случае я вижу два жизнеспособных решения для веб-интерфейса:
используйте клиентскую библиотеку Groovy REST для получения и отправки ваших доменных объектов непосредственно с вашего контроллера.При необходимости, упакуйте их в объекты команд, которые отражают ваши доменные объекты, чтобы вы могли поделиться кодом проверки с внутренним сервером.
создать что-то вроде REST GORM заменяет Hibernate запросами к вашему веб-сервису REST.Вы можете посмотреть на GORM для плагина Mongo в качестве примера того, как создать такую замену GORM.
Мне нравится последняя идея, это было бы полезнообщедоступный плагин.К сожалению, его пока не существует.