关于使用spring-mvc(REST服务)和jQuery设计系统的最佳方法。我认为存在以下方法。
考虑到这一点,我意识到第一和第二个有以下缺点。
我只想实施第三种方法,但问题是:我没有看到任何缺点或任何缺点 在使用这种方法之前我应该知道的建议?还有任何关于处理这种系统的建议,很高兴听到来自java和jquery开发人员的信息
答案 0 :(得分:2)
我同意你的观点,版本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垃圾。