繁体   English   中英

REST春季服务和JQUERY Web集成最佳实践

[英]REST spring services and JQUERY web integration best practices

关于使用spring-mvc(REST服务)和jQuery设计系统的最佳方法。 我认为存在以下方法。

  1. 一个包含war服务和jQuery内容的war文件,通过这种方法,我们可以将所有域对象与spring-mvc一起使用,我们可以创建初始的jsp页面,然后使用对服务的jQuery调用来刷新某些元素。
  2. 两个war文件,一个具有spring服务,另一个包含spring-mvc内容和jquery,在这种情况下,页面的创建可以由jsp页面完成,还可以通过对我们的服务的jquery调用来刷新元素,但是为了使这一点成为可能,我们需要具有在第二次战争中使用的通用域对象库,还需要在某些需要创建的控制器中内部使用restTemplate(听起来像重复代码)。
  3. 拥有一个运行REST服务的war文件,另一个没有任何Java或spring东西的“包”,仅使用jquery,这意味着所有调用和信息检索都必须使用jquery完成,初始jsp页面创建不能使用此选项来完成,而所有内容是通过REST服务获得的。 (无需使用内部控制器通过Java调用服务)

考虑到这一点,我意识到一个和第二个缺点如下。

  • 将服务和Web内容放在同一个war文件中听起来像SOA中的一个坏主意,战争的进行将导致移动不必要的jquery和web内容。
  • 让jsp和jquery混合在一起听起来不是一个好主意,但是我认为这是一种常见的做法(我想知道为什么吗?),我认为我们需要在第二次战争中创建一些控制器来最初创建网页,然后使用restTemplate获取初始信息,然后使用jquery调用进行更新或刷新。 感觉有一个控制器只是为了向服务检索数据,为什么不直接去……

我只想实现第三种方法,但问题是:使用该方法之前,我没有看到任何不利条件或应该知道的建议吗? 此外,对于处理此类系统也有任何建议,很高兴听到您的消息,这些消息来自java和jquery开发人员

我同意您的观点,第3版为您提供了最大的灵活性,这是您在设计界通常会看到的。

将其余部分和前端完全视为单独的应用程序。 如果正确完成,您将拥有一个具有适当敏捷性的非常强大的应用程序。

  • 版本1:在初始控制器调用中加载页面,并使用jquery进行后续服务调用。 所有代码都存在于一个包中。

    缺点是紧密耦合。 现在,您被限制使用api的语言,并且不再为数据和服务提供基于服务的方法。

    我看到这个版本主要是在应用程序开发人员更关心异步前端调用而不是基于SOA的语言时应用的。

  • 版本2:进行一场包含Spring Services的战争,一场针对JS的战争。

    使用jar而不是其他服务器应用程序可以解决此方法的问题。 尽管通常使用这种方法,但缺点仍然在于外部包装。

    使用包含所有代码的jar来命中数据库,并创建与控制器用于序列化和响应Web请求的代码分开的域对象,这将创建一种非常干净的方法来管理api,但这会带来复杂性和额外的组件,可以避免使用版本3。它也具有与版本1相同的奇怪行为。

    我已经看到开发纯api应用程序的团队采用了这种方法。 在还需要前端组件的团队中,我还没有看到这样做。 在这些情况下,已使用方法一或方法三。

  • 版本3:创建一个仅处理前端职责的应用程序创建一个处理服务器端职责的应用程序。

在版本2和版本3中,请将您的服务呼叫与http呼叫分开。 使它们不同,因为它允许模块化。

例如,我们需要响应http请求

@Controller
class MyController{
    @Autowired
    private MyService service;
    @GET
    public String getData(String dataId){
       return service.getData(dataId);
    }
}

我们需要回应活跃的mq请求

 Message m = queueReceiver.receive();
 if (m instanceof DataRequest) {
     DataRequest message = (DataRequest) request;
     queueSender.send(service.getData(request.getDataId())); //service call
 } else {
     // Handle error
 }

此外,它还使您能够管理与服务端不同的http端需要处理的内容。

@GET
public String getData(HttpRequest request, String dataId){
   if(!this.handleAuth(request)){
      throw new 403();
   }
   try{
      return service.getData(dataId);
   catch(Exception e){
      throw new WrappedErrorInProperHttpException(e);
   }
}

这使您的服务层可以处理仅对那些服务有意义的任务,而无需处理所有http废话。 并且让您处理与服务层分开的所有HTTP废话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM