Work
OlitGlobal
tags: Common
- REST Triangle
- Nouns:URI,為 Resources (資源) 定義唯一的識別
- Verbs:使用一組有限的動詞對資源進行操作,在 HTTP 中使用 GET, POST, PUT, DELETE 來操作資源
- Content types - 格式:MIME Types
- Representational State Transfer 表現層狀態轉換
- Representational:表現形式,格式,如JSON,XML…
- State Transfer:狀態變化,如HTTP動詞
- URL定位資源,用HTTP動詞(GET,POST,DELETE…)描述操作
- 一種軟體架構風格,例如:
- HTTP
- Web Service:Amazon AWS, Facebook, Google Web Service
REST
- 網路中Client端和Server端的一種呼叫服務形式,透過既定的規則,滿足約束條件和原則的應用程式設計,對資源的操作包括獲取、創建、修改和刪除資源
REST Constraints 條件/原則
- Client-Server:通訊只能由Client單方面發起
- Stateless:每一個 Request 必須包含所有需要的資訊,而不需依賴其他 Request 的狀態
- 不必維持連結狀態
- 反例:必須先 call A 再 call B
- Cacheable:改善反應時間跟server的負載能力
- Uniform Interface:透過介面降低耦合並提高獨立性
- Identification of resources:唯一的資源識別方法,URL
- Manipulation of resources through representations:透過特定的操作方法來操作資源,GET, POST, PUT ,DELETE
- Self-descriptive messages:Content-Type
- Layered System:目的在於隱藏介面後的實作細節,使得系統更容易實現快取、加密等等機制
- Code-On-Demand (optional):支援通過下載並執行一些程式碼(Javascript),對Client的功能進行擴充
REST 架構
- Data Elements
- Resource and Resource identifier:URL
- Representations:Content-Type
- Connectors
- Client
- Server:Apache API
- Cache:browser cache
- Tunnel:強制進行加密,SSL
- 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 |
- More Detail:REST API & RESTful Web Services Explained
REST Example
-
Controller 專案
// 取得預設資料
$.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
-
URI(統一資源標識符 Uniform Resource Identifier)
-
URL(統一資源定位符 Uniform Resource Locator)
-
URN(統一資源名稱 Uniform Resource Name)
MIME Types
- MIME:Multipurpose Internet Mail Extensions
- 又稱為 Internet media type, content type
- 例如:xml, json
- More Detail:參考文件
HTTP
-
HyperText Transfer Protocol 超文本傳輸協定
-
Request / Response
-
HTTP動詞
- safe:該操作不會改變原本的資源狀態
- 如果會修改資料就是不安全
- 影響可否 Cache快取(不重複發出請求)
- idempotent 冪等:該操作不管做幾遍,都會得到同樣的資源狀態結果
- 在不確定有沒有成功送出時重新發出請求
- 影響可否 Retry
說明 safe idempotent GET 取得(想要的服務)的資料或是狀態 V V POST 新增一項資料 PUT 利用更新的方式於"指定位置"新增一項資料,如果存在就覆蓋過去 V PATCH 在現有的資料欄位中,增加或部分更新一筆新的資料(擴充) DELETE 指定資料刪除 V - safe:該操作不會改變原本的資源狀態
-
這些Method也只是HTTP建議我們這樣做而已,至於網站架設者(後端)是不是有遵守又是令外一回事了
- 例如:用delete來新增留言
-
常用工具:Postman
SSL
-
Secure Sockets Layer 安全通訊協定
Extensive 延伸閱讀
Reference 參考資料
- 淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful!
- SOAP vs REST (differences)
- GET,POST和其他4種METHOD的差別
- HTTP Verbs: 談 POST, PUT 和 PATCH 的應用
- 理解URI
- REST Vs SOAP - What is the difference? | Tech Primers
- SOAP vs. REST: The Differences and Benefits Between the Two Widely-Used Web Service Communication Protocols
- SOAP vs REST 101: Understand The Differences
沒有留言:
張貼留言