接續上篇: 花栗鼠柑仔店: REST閱讀心得 part 1
參考資料: Representational State Transfer - Wikipedia, the free encyclopedia
4. 介面設計原則
任何REST介面必須提供一個一致的介面(uniform interface), 此為設計REST服務的基礎.
(1) 資源的識別 (Identification of resources)
client的請求中會有不同的資源被識別出來, 如在web-based的REST系統利用URI來識別資源. 這些資源在邏輯概念上是與其實體展現在client的表現是分開的, 比如, server 不會將其資料庫原始資料送往client, 但是會將資料紀錄轉換成 HTML, XML或JSON之類來表示, 端視要求是什麼與server如何實作而定.
(2) 資源的維護(透過資源的表述來實行資源的維護) (Manipulation of resources through these representations)
當一個client持有資源的表述(representation), 此表述包括資源相關的metadata, client擁有足夠的資訊, 提供來獲得權限修改與刪除server上的資源.
(3) 自我描述的訊息 (Self-descriptive messages)
每個訊息包含了足夠的資訊足以描述如何處理該訊息, 舉例根據Internet media type(以前是指MIME type)來決定要用哪一個程式來處理該檔案. 回應(Responses)也必須清楚指明其是否可被快取(cacheability).
(4) 超媒體當成是應用程式狀態的引擎(?) (Hypermedia as the engine of application state)
假設client想存取相關的資源, 這些資源必須被表述(representation)所識別出來, 舉例如提供這些資源的URI成一個標準的格式, 像超連結(hypertext link)的形式即可.
5. 主要的目標 (Key goals)
REST最主要的目標包含了:
- 元件互動間的可延展性 (Scalability of component interactions)
- 一般化的介面 (Generality of interfaces)
- 各元件可被獨立開發 (Independent deployment of components)
- 具有中介元件可以減少延遲, 增強安全性, 甚至將傳統的舊系統包裝起來相容新系統 (Intermediary components to reduce latency, enforce security and encapsulate legacy systems)
REST被應用到描述web的架構, 幫助找出已存在的問題, 比較不同的解決方法, 確保延伸的通訊協定不會違反Web核心的限制.
Fielding在其論文中描述REST在延展性(scalability)的效果如下:
REST式的client-server分離是考量到要簡化元件的實作, 降低連接器語意(connector semantics)解釋的複雜度, 改善效能調教的有效度, 與增加純server元件的延展性(scalability).
多層系統的要求允許中間媒介的存在如 — proxies, gateways, and firewalls — 引入整個系統讓元件間的通訊不需要刻意改變其介面, 允許這些中間媒介可以輔助元件間通訊的溝通或加入大型分享的快取以改善效能. REST透過限制訊息(message)本身必須要是自我完整描述(self-descriptive)來使中介的處理可行, 這些自我描述包括了: 要求(request)的互動必須要無狀態(stateless), 標準化的函式與媒體型態被用來表示交換訊息的語意, 還有訊息回復(response)必須要明白指示其是否可被快取(cacheability).
沒有留言:
張貼留言