设计问题:如何创建由多个域对象组成的restful接口?

设计问题:如何创建由多个域对象组成的restful接口?,rest,grails,gorm,Rest,Grails,Gorm,因此,我们从公司的grails开始,我们正在创建这个应用程序,它使用ExtJS作为前端,使用grails作为后端 因为ExtJS只与JSON一起工作以填充数据表等,所以我们面临着创建这些接口的挑战,这些接口将以restful方式向ExtJS发送和接收JSON对象 在仔细考虑了我们的领域模型之后,我们确定了一个。很快,我们意识到系统中的一些表将由来自多个域对象的信息组成 经过一番搜索,我们找到了这个插件,它基本上为任何给定的域对象公开了一个RESTful接口 这就引出了问题的要点 在我看来,有两种

因此,我们从公司的grails开始,我们正在创建这个应用程序,它使用ExtJS作为前端,使用grails作为后端

因为ExtJS只与JSON一起工作以填充数据表等,所以我们面临着创建这些接口的挑战,这些接口将以restful方式向ExtJS发送和接收JSON对象

在仔细考虑了我们的领域模型之后,我们确定了一个。很快,我们意识到系统中的一些表将由来自多个域对象的信息组成

经过一番搜索,我们找到了这个插件,它基本上为任何给定的域对象公开了一个RESTful接口

这就引出了问题的要点

在我看来,有两种方法可以继续

1) 为ExtJS中的每个数据表创建一个特定的控制器,这些数据表将具有不同的操作,并且在每个操作中,它将创建或接收JSon对象,以便对数据表使用的不同域对象执行CRUD

在我看来,这将更加耗时。无论如何,这是一个选择

2) 另一个选项是通过为我们要填充的datatable创建特定的“复合”域对象(此对象中的每个属性都是datatable中的一列)来访问上述插件。在这之后,只需使用JSON RESTful API for GORM插件将其公开,该插件基本上为我们处理所有CRUD操作

甚至有没有一种方法可以创建一个我们想要的域模型中的对象,而不需要在后端实际创建更多的数据库表

我相信我们走的是正确的道路,我们只需要专家的一点指导:)


提前谢谢

在您的情况下,我建议创建一组命令对象和控制器来处理它们。这将优雅地允许您的“复合”方法

是一个类,它具有域对象所具有的所有酷验证和数据绑定功能,但没有直接持久性

查看链接:

有意思

我最终采用了不同的方法,让我知道你的想法

基本上,我们最终使用了这个插件:公开一个域类并处理所有CRUD操作

我们所做的是为每个类创建一个自定义JSON封送器,如下所示

Bootstrap.groovy

[...] 
        JSON.registerObjectMarshaller(Person){ 
                def returnArray = [:] 

                returnArray['id'] = it.id 
                returnArray['name'] = it.name 
                returnArray['street'] = it.address.street 

                return returnArray 
        }
      //the plugin exposes the class with this 
       static expose = ['person'] 

       String name 
       Address address 
[...] 
Person.groovy

[...] 
        JSON.registerObjectMarshaller(Person){ 
                def returnArray = [:] 

                returnArray['id'] = it.id 
                returnArray['name'] = it.name 
                returnArray['street'] = it.address.street 

                return returnArray 
        }
      //the plugin exposes the class with this 
       static expose = ['person'] 

       String name 
       Address address 
[...] 
封送拆收器实际上作用于调用“as JSON”方法时如何转换类

现在,由于这个插件,我们可以

GET
我们得到一个json对象,它包含来自person和其他类的信息,如下所示:

{"data":{"id":"1", "name":"Peter", "Spooner St"}} 
唯一的问题是,如果可能的话,我们现在必须找出如何通过更新或创建来更新街道地址


想法

有趣的。。。让我看看。我在答案中提出了不同的解决方案,让我知道你的想法。