簡體   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