站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式SOAPWeb Service

【Web Service】何謂 REST 表現層狀態轉換?

tags: Work OlitGlobal

Common

  1. REST Triangle
    • Nouns:URI,為 Resources (資源) 定義唯一的識別
    • Verbs:使用一組有限的動詞對資源進行操作,在 HTTP 中使用 GET, POST, PUT, DELETE 來操作資源
    • Content types - 格式:MIME Types
  2. Representational State Transfer 表現層狀態轉換
    • Representational:表現形式,格式,如JSON,XML…
    • State Transfer:狀態變化,如HTTP動詞
    • URL定位資源,用HTTP動詞(GET,POST,DELETE…)描述操作
  3. 一種軟體架構風格,例如:
    • HTTP
    • Web Service:Amazon AWS, Facebook, Google Web Service


REST

  • 網路中Client端和Server端的一種呼叫服務形式,透過既定的規則,滿足約束條件和原則的應用程式設計,對資源的操作包括獲取、創建、修改和刪除資源

REST Constraints 條件/原則

  1. Client-Server:通訊只能由Client單方面發起
  2. Stateless:每一個 Request 必須包含所有需要的資訊,而不需依賴其他 Request 的狀態
    • 不必維持連結狀態
    • 反例:必須先 call A 再 call B
  3. Cacheable:改善反應時間跟server的負載能力

  4. Uniform Interface:透過介面降低耦合並提高獨立性
    • Identification of resources:唯一的資源識別方法,URL
    • Manipulation of resources through representations:透過特定的操作方法來操作資源,GET, POST, PUT ,DELETE
    • Self-descriptive messages:Content-Type
  5. Layered System:目的在於隱藏介面後的實作細節,使得系統更容易實現快取、加密等等機制
  6. Code-On-Demand (optional):支援通過下載並執行一些程式碼(Javascript),對Client的功能進行擴充

REST 架構

  1. Data Elements
    • Resource and Resource identifier:URL
    • Representations:Content-Type
  2. Connectors
    • Client
    • Server:Apache API
    • Cache:browser cache
    • Tunnel:強制進行加密,SSL
  3. Components
    • User Agent:Browser
    • Origin Server

RESTful API

  • 符合 REST Constraints 的系統稱做 RESTful
  • 設計 RESTful Web Service 的要訣只是盡可能使用 HTTP 既有的能力
API RESTful API
獲取使用者資料 /getAllUsers /GET/users
獲取使用者資料 /getUser/1 /GET/user/1
新增使用者資料 /createUser /POST/user
更新使用者資料 /updateUser/1 /PUT/user/1
刪除使用者資料 /deleteUser/1 /DELETE/user/1

REST Example

// 取得預設資料 $.ajax({ url: "/cgi-bin/cfg", type: "POST", dataType: "json", cache: false, data: { cmd: "get" }, success: function(response) {} }); // 送出、提交資料 $.ajax({ url: "/cgi-bin/cfg", type: "POST", dataType: "json", cache: false, data: { cmd: "set", view: view, data: JSON.stringify(data) }, success: function(response) {} });

比較:REST v.s. SOAP

REST SOAP
Representational State Transfer Simple Object Access Protocol
architectural style 設計規範 protocol 協議
coupling 寬鬆,如同瀏覽器般 tight,只要server或client改變,就會中斷
格式 text, JSON, XML XML
常用格式 JSON → data size較小,高效 XML → 易閱讀
規範、標準 很少 必須嚴格遵守
不須知道API的任何訊息,格式自由 需要了解XML既定格式要如何撰寫
執行方式 URL path soap 中的 method
Javascript 簡單 稍微複雜,jQuery…

SOAP - coupling of server and client

  • There’s a rigid contract between client and server, and everything is expected to break if either side changes anything.
  • You need constant updates following any change.

補充

URI

  1. URI(統一資源標識符 Uniform Resource Identifier)

  2. URL(統一資源定位符 Uniform Resource Locator)

  3. URN(統一資源名稱 Uniform Resource Name)

MIME Types

  1. MIME:Multipurpose Internet Mail Extensions
  2. 又稱為 Internet media type, content type
  3. 例如:xml, json
  4. More Detail:參考文件

HTTP

  1. HyperText Transfer Protocol 超文本傳輸協定

  2. Request / Response

  3. HTTP動詞

    • safe:該操作不會改變原本的資源狀態
      • 如果會修改資料就是不安全
      • 影響可否 Cache快取(不重複發出請求)
    • idempotent 冪等:該操作不管做幾遍,都會得到同樣的資源狀態結果
      • 在不確定有沒有成功送出時重新發出請求
      • 影響可否 Retry
    說明 safe idempotent
    GET 取得(想要的服務)的資料或是狀態 V V
    POST 新增一項資料
    PUT 利用更新的方式於"指定位置"新增一項資料,如果存在就覆蓋過去 V
    PATCH 在現有的資料欄位中,增加或部分更新一筆新的資料(擴充)
    DELETE 指定資料刪除 V
  4. 這些Method也只是HTTP建議我們這樣做而已,至於網站架設者(後端)是不是有遵守又是令外一回事了

    • 例如:用delete來新增留言
  5. 常用工具:Postman

SSL

  1. Secure Sockets Layer 安全通訊協定

Extensive 延伸閱讀

  1. 超文本傳輸協定 (Hypertext Transfer Protocol)
  2. 從無到有打造 RESTful API service
  3. XML Soap

Reference 參考資料

  1. 淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful!
  2. SOAP vs REST (differences)
  3. GET,POST和其他4種METHOD的差別
  4. HTTP Verbs: 談 POST, PUT 和 PATCH 的應用
  5. 理解URI
  6. REST Vs SOAP - What is the difference? | Tech Primers
  7. SOAP vs. REST: The Differences and Benefits Between the Two Widely-Used Web Service Communication Protocols
  8. SOAP vs REST 101: Understand The Differences

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽