基于 Spring 設計并實現 RESTful Web Services

jopen 11年前發布 | 25K 次閱讀 Spring RESTful WEB服務/RPC/SOA

在本教程中,你將會使用Spring來創建一個具有生產力的RESTful網絡服務。

為什么用RESTful網絡服務?

從和Amazon Web Services的整合,到聚合多個數據源,RESTful網絡服務遵從了Roy Fielding的架構風格的指導方針,提供了簡單、高效的web APIs,支持的API用戶數量從少量到百萬級別。

你要實現一個RESTful風格的網絡服務,可能會是因為:

  • 你正在創建一個API,而客戶端需要通過網絡才能使用它。
  • 你想要開放你們單位的數據提供給各類客戶們通過網絡來使用。
  • 你需要把你的應用和組織內其它應用整合起來,但是你無法控制其它應用所用的語言、工具或架構。
  • </ul>

    或者你只是出于好奇想看看Spring實現的RESTful網絡服務長什么樣子。不管處于什么原因,你找對地方了。

    你將創建什么

    Yummy Noodle Bar(美味面條吧)正在全球化。它想要給一系列商務聚合組織提供一個RESTful Web服務,特別是Let’s Nosh(讓我們來點小吃),一個受歡迎的餐廳指南,它將大型商務引入小規模的面條吧。你將擴展Yummy Noodle Bar內部應用程序,創建一個新的公共Web API以供提交跟蹤取消以及修改訂單

     基于 Spring 設計并實現 RESTful Web Services

    你需要什么

    • 大約每節三十分鐘。你應該能夠在每周的午餐時間,通過整個教程,以您的方式輕松的工作在周末做這一切
    • 安裝構建工具Gradle版本1.6或更高版本。
    • 一份代碼拷貝(可通過git 下載的ZIP文件獲得)。
    • 你選擇的IDE。Spring推薦Spring Tool Suite是免費下載的。
    • </ul>

      下載并運行代碼

      </h3>

      如果你下載過基礎代碼你會發現本教程每節都一個單獨的文件夾,編號為1,23等。也有一些代碼片段實際上是原始的并且每個部分有單獨的完整代碼片段

      初始的 代碼集包括:

      • 一個項目布局
      • 本教程開始創建的核心領域事件類(上面的'Yummy Noodle Bar Application'
      • 對于這些類的一些基本的單元測試
      • </ul>

        每個部分完整代碼在包括初始代碼的基礎上,再加上教程某一點的實現代碼

        你可以選擇從初始代碼集,或者你也可以從一個給定部分的完整代碼集開始。不是每個代碼文件都顯示在教程中,因為那會將事情搞得很慢。重要的事情是,比如測試創建RESTful服務以及一些關鍵領域的對象

        有許多用于構建的系統,而本教程使用Gradle和Gradle Wrapper來進行構建,所以如果你手頭有一份代碼的拷貝,你不需要安裝任何東西來運行這些代碼。

        例如,如果你想要檢查最初的代碼集,你可以這樣做:

        $ git clone https://github.com/spring-guides/tut-rest.git  
        $ cd tut-rest/initial  
        $ ./gradlew clean test

        在那里,你可以瀏覽build/reports/tests 并查看所有的測試結果。

        如果你想跳到第6節,本教程的最后一部分,來運行該web應用及其測試,可以這樣:

        $ cd ../6/complete 
        $ ./gradlew tomcatRunWar

        在另外一個控制臺中輸入:

        $ ./gradlew test 

        有些章節不需要運行該web應用來執行測試。

        Yummy Noodle Bar應用框架和核心領域

        該應用目前的架構在下面這個"Life Preserver"圖中有所展示:

         基于 Spring 設計并實現 RESTful Web Services

        Life Preserver圖是一種工具,用來構建那些遵從了Hexagonal Architecture原則的應用,有時也被稱為'Ports and Adapters',它最早由Alistair Cockburn進行描述。Life Preserver圖展示了你的應用的核心領域以及包圍在其周圍的整合領域,這些領域可以直接對應到程序包或組件,你將會在整個教程中使用到它們,所以這是一種理解事物模型的很棒的方式。

        打開初始項目,你將會看到上面的life preserver圖映射到了src/main/java/com/yummynoodleba目錄下的不同包中。

        在核心應用的頂層包com.yummynoodlebar.core中,包含著下列內容:

        • domain. 組件包,只包含應用核心領域概念。這些類是核心領域普世語言(領域驅動設計里的術語,建議參考鏈接里的原文 - 譯者注)的顯式表達。
        • repository. 組件,用于存儲和獲取系統領域對象的當前狀態。
        • event. 組件,包含領域可以接收和處理的事件。
        • service. 組件,用于接收到事件時,處理可執行的操作。
        • </ul>

          花些時間讓你自己熟悉每個包里的組件。對核心領域組件的測試在項目的src/test里。這些測試會告訴你如何使用這些組件。

          RESTful web服務領域

          RESTful web服務能夠把你的應用和所有可能用到你服務的客戶端集成在一起。因此,RESTfulF服務存在于他們自己的集成領域,在你的應用程序核心之外,正如下面的圖一樣,RESTfulF能夠服務于你的應用程序的整個生命周期中。

           基于 Spring 設計并實現 RESTful Web Services

          把你的應用程序和外面的世界整合在一起,需要考慮下面的一些設計和實現約束:

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!