有關REST的一點學習筆記

jopen 12年前發布 | 15K 次閱讀 REST Web框架

REST的意思是表征狀態轉移(Representational State Transfer),它是一種基于HTTP協議的網絡應用接口風格,充分利用HTTP的方法實現統一風格接口的服務。其中包括了一下8種方法:

  • GET: 請求獲取指定資源
  • POST: 向指定資源提交數據
  • PUT: 請求服務器存儲一個資源
  • HEAD: 獲取資源的響應頭
  • DELETE: 請求服務器刪除指定資源
  • TRACE: 回顯服務器收到的請求用于診斷調試
  • CONNECT: 設置連接方式、代理服務器等
  • OPTIONS: 返回服務器支持的HTTP請求方法
  • </ul>


    其中常用的幾種就是POST/DELETE/PUT/GET,達到增刪改查的效果。REST模式的Web應用和服務較SOAP和XML-RPC來說更加簡潔明了,但同時也會對安全性提出更高的要求。這里有兩個概念:安全,冪等。安全是指沒有副作用,連續訪問多次所獲得的結果不受訪問者影響。而冪等指的是重復請求多次與一次請求效果是一樣的。在四中常用的操作中,GET是非安全的,其他三個都是安全無副作用的;POST是非冪等的,其他三個都是冪等的。

    設計REST的人認為:良好的網絡應用表現為一系列的網頁,可以看作一個個的虛擬狀態機,用戶選擇這些鏈接導致下一個網頁傳輸到用戶終端呈現給用戶,所以REST服務核心思想是狀態的改變。

    值得提醒的是: REST是設計的風格而不是標準,REST通常基于使用HTTP、URI、XML、HTML這些現有廣泛流行的協議和標準。

    • 資源由URI來指定
    • 對資源的操作包括獲取、修改、創建和刪除
    • 通過操作資源的表現形式來提供服務
    • 資源的表現形式是XML或者HTML取決于讀者是機器還是人,是消費Web服務的客戶端軟件還是瀏覽器,或者其他什么的
    • </ul>


      RESTful Web服務也稱為RESTful Web API,是一個使用HTTP并遵循REST原則的Web服務。它從以下三個方面資源進行定義:

      • URI
      • Web服務接受與返回的互聯網媒體類型,比如Json, XML, YAML等
      • Web服務在資源上鎖支持的一系列請求方法,比如POST, GET, DELETE 和 PUT
      • </ul>

        說了這么多,到底為什么要用REST這種設計風格呢,好處如下:

        • 可以充分利用緩存cache來提高響應速度
        • 通訊本身的無狀態可以讓不同的服務器的處理所有類型的請求,提供了服務器的擴展性
        • 瀏覽器就可以充當客戶端,簡化軟件需求
        • 相對于其他疊加在HTTP協議只上的極致,REST依賴性更小
        • 不需要額外的資源發現機制
        • 在軟件技術演進中長期來看具有良好的兼容性
        • </ul>


          Node JS開發中常用到的一個模塊叫Express,它支持REST風格的請求方式。Express對每種HTTP請求都設計了不同的路由綁定函數。包括了:

          • GET: app.get(path, callback)
          • POST: app.post(path, callback)
          • PUT: app.put(path, callback)
          • DELETE: app.delete(path, callback)
          • PATCH: app.patch(path, callback) - 新增HTTP方法,功能是定義部分更新某個資源
          • TRACE: app.trace(path, callback)
          • CONNECT: app.connect(path, callback)
          • OPTIONS: app.options(path, callback)
          • ALL: app.all(path, callback)
          • </ul>

            筆者覺得REST這種設計風格比較適應當下錯綜復雜的互聯網時代,多樣化的用戶終端(瀏覽器、iPad、手機甚至任何軟件本身)正好能發揮REST簡潔、兼容的巨大優勢。同時對于研發團隊而言,瞬息萬變的需求也非常適用于REST思想,因為它能大大降低研發的復雜性,提高整個系統的伸縮性。“通過URL來設計系統結構” 這句話就是對REST的一種很直白的解釋。對研發團隊中的測試人員來說,這也是大大提高系統可測性和簡化測試門檻的一種手段。試想一下,每一個URL對應一個resource,代表一種表現形式,那么每種表現形式,都可以順利成章的設計成test case,實施TDD(測試驅動開發)就會變得簡單而輕松愉快,因為當系統設計好之后,test case就能很自然地產生,哪怕一個功能都還沒有實現。所以筆者認為REST的思想,與TDD其實是不謀而合的,通過抽象URL來設計系統,正如通過 test case來設計代碼一樣!


            轉自:http://blog.csdn.net/ant_yan/article/details/7963517

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