我应该为GWT应用程序构建REST后端

ams*_*ams 33 rest gwt spring spring-mvc gwt-rpc

我正在计划一个新的应用程序,并一直在试验GWT作为可能的前端.我面临的设计问题是这个.

我应该使用选项A:GWT-RPC并快速构建应用程序

选项B:使用Spring MVC 3.0和所有优秀的@Controller,@ Service,@ Repository注释构建REST后端,并使用GWT覆盖功能和GWT请求构建器构建客户端库以与后端通信?

我对这种设计的所有优点和缺点以及人们的经验感兴趣?

Chr*_*her 28

问自己一个问题:"我是否需要重用非GWT前端的服务器端接口?"

如果答案是"否,我将只有一个GWT客户端":您可以使用GWT-RPC,并利用您可以在服务器和客户端使用Java对象这一事实.这也可以使通信更有效,至少在使用时<inherits name="com.google.gwt.user.RemoteServiceObfuscateTypeNames" />,将类型名称缩短为小数值.您还可以获得更好的错误处理(使用例外),类型安全等优势.

如果答案是"是的,我将使我的服务可以访问多种前端":您可以使用REST与JSON(或XML),非GWT客户端也可以理解.除了切换客户端之外,这还可以让您在将来更轻松地切换到不同的服务器实现(可能是非Java).缺点是,您可能必须在GWT客户端编写包装器(JavaScript重叠类型)或转换代码,以便从JSON对象构建漂亮的Java对象.部署新版本的服务时,您必须特别小心,这使我们回到缺乏类型安全性.

第三种选择当然是建立两者.如果公共REST接口应该与GWT-RPC接口不同,我会选择这个选项 - 可能只提供易于使用的服务的子集.

  • @ams:绝对.您可以在需要时立即在Java和JSON对象之间引入映射器 - 然后您可以实际选择提供两种服务或弃用GWT-RPC.我不担心过多地预测通用Java接口,因为这样的改变无论如何都会导致(小)代码更改.偶尔给自己一个现实检查:"以后在JSON中很难做到这一点"(例如,多次引用相同实例的对象图 - 或者甚至包含圆圈的对象图 - 使用GWT-RPC更容易发送) . (2认同)

Hir*_*ino 25

如果使用也可以使用RestyGWT项目,则可以同时执行这两项操作.它将使基于REST的JSON资源调用与使用GWT-RPC一样简单.此外,您通常可以从客户端的服务器端重用相同的请求响应DTO.


小智 8

我们在创建Spiffy UI框架时遇到了同样的问题.我们选择了REST,我永远不会回去.我甚至说GWT-RPC是一种GWT反模式.

即使您从未打算公开REST端点,REST也是一个好主意.创建REST API将使您的UI更快,您的API更好,整个应用程序更易于维护.