1. 程式人生 > >RESTful levels、HATEOAS

RESTful levels、HATEOAS

str 文檔 指定 需要 coyote status 程序 ant 交互

概述:  

  REST(英文:Representational State Transfer,簡稱REST)描述了一個架構樣式的網絡系統,比如 web 應用程序。它首次出現在 2000 年 Roy Fielding 的博士論文中,Roy Fielding是 HTTP 規範的主要編寫者之一。在目前主流的三種Web服務交互方案中,REST相比於SOAP(Simple Object Access protocol,簡單對象訪問協議)以及XML-RPC更加簡單明了,無論是對URL的處理還是對Payload的編碼,REST都傾向於用更加簡單輕量的方法設計和實現。值得註意的是REST並沒有一個明確的標準,而更像是一種設計的風格。

原則條件:

  REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。   RESTful的實現: RESTful Web 服務的 Java 框架; RESTful Web 服務與 RPC 樣式的 Web 服務;構建 RESTful Web 服務的多層架構。   

RESTful 的成熟度模型:

Level 0

利用 HTTP 協議做數據交換,所有的參數描述通過 url 或者 POST body 形式通知服務器,返回相應的數據,此級別通常都是基於 。實質上就是基於 HTTP 的 RPC(遠程過程調用),具體交付的細節完全由相關規範或團隊內部約定解決。

Level 1

將 API 按照 RESTful 中資源的方式進行劃分,初步有了自我描述(self description)的特性了,客戶端可以對相關的資源進行更加細致的操作。

Level 2

這個級別有更加進一步的利用了 HTTP 的特性,增加了對 HTTP verb (比如 GET 表示查詢、POST 表示創建、PUT 表示修改、DELETE 表示 等等)的運用,並且運用原有的 HTTP response status 來表征業務上請求的成功與失敗,一般項目常見的 RESTful 運用基本都接近這個級別。

Level 3

這個基本也稱作 HATEOAS (Hypertext As The Engine Of Application State),這個級別是 RESTful 最復雜的實現,這個級別最理想的情況是,不需要特別復雜 API 文檔進行描述的,這裏的 API 設計最大化的實現了 RESTful 的自我描述特性。這種方案雖然引入很大的復雜性,但是最大限度的將 API 設計變得配置化了,所有 API 設計將會基於更加抽象的工作流設計了。


------------------------- 轉自:https://www.jianshu.com/p/f264db28bce1

什麽是HATOEAS:

  HATEOAS是 Hypertext As The Engine Of Application State 的縮寫。采用Hypermedia的API在響應(response)中除了返回資源(resource)本身外,還會額外返回一組Link。 這組Link描述了對於該資源,消費者(consumer)接下來可以做什麽以及怎麽做。

舉例來說,假設向API發起一次get請求,獲取指定訂單的資源表述(representation):

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 05 Jun 2015 02:54:57 GMT

{
    "tracking_id": "123456",
    "status": "WAIT_PAYMENT",
    "items": [
        {
            "name": "potato",
            "quantity": 1
        }
    ],
    "_Links": {
        "self": {
            "href": "http://localhost:57900/orders/123456"
        },
        "cancel": {
            "href": "http://localhost:57900/orders/123456"
        },
        "payment": {
            "href": "http://localhost:57900/orders/123456/payments"
        }
    }
}
  • 理解Link中的“self”的消費者知道使用get方法訪問其“href”的uri可以查看該訂單的詳細信息
  • 理解Link中的“cancel”的消費者知道使用delete方法訪問其“href”的uri可以取消該訂單
  • 理解Link中的“payment”的消費者知道使用post方法訪問其“href”的uri可以為該訂單付款

  HATEOAS提倡在響應返回Link來提示對該資源接下來的操作。這種方式解耦了服務端URI,也可以讓客戶端開發者更容易地探索API。最後,通過Link來判斷業務狀態,還能有效地消除單頁應用中的業務規則重復實現。

-----------------------------

轉自:https://www.colabug.com/3967837.html

RESTful levels、HATEOAS