REST 是 Representational State Transfer 的縮寫,由 Roy Fielding 博士在 2000 年的博士論文中所提出。他同時也是 HTTP 規範的主要作者之一。
REST 是一種軟體架構風格(並非標準),目的是幫助在世界各地不同軟體、程式在網際網路中能夠互相傳遞訊息。而每一個網頁都可視為一個資源(resource)提供使用者使用,以資源操作的概念(指的是對某項資源,譬如 User、Post 等,指派 Show、Edit 等動作),結合 url path 與 HTTP Method ,目的是使 url path 更為簡潔、容易被理解,除了介面簡潔之外,尚有增加快取 cache 效率、提升 api 活用性等優點。換句話說, REST 風格可以單從 HTTP request 就能看出如何操作伺服器的資料。
Resources
REST的一個最重要的觀念就是 resources (特定資訊的資源),每一個 resource 由一個 global identifier (即 URI )所表示。為了操作這些 resources,網路的 components (即 clients 跟 servers) 透過標準化的介面 (即HTTP) 來溝通並交換這些 resources 的 representations (即實際上傳達資訊的文件).
任意數量的 connectors (如 clients, servers, caches, tunnels 等) 可以居中 request,但是都不可以 “seeing past” (不需要其他 layer層)。這樣的應用程式跟一個 resource 互動根據兩件事情: resource的URI 跟 要做的動作 — 它不需要知道是否有 caches, proxies, gateways, firewalls, tunnels, 或其他任何藏在 sever 之間的東西。這個應用程式只需要知道資訊的格式 (representation),通常是 HTML 或 XML 或圖片什麼的。
美麗 (Beauty) 的事物可以稱為 Beautiful;設計為 REST 的系統就可以稱為 RESTful。
RESTful路由便是充分應用REST風格的路由設置。而你可以透過 URL(Uniform Resource Locator),也就是這些資源的地址,來取得這些資源並在你的瀏覽器上使用。
REST 提出了一些設計概念和準則:
- 網路上的所有事物都被將被抽象成資源 (resource)
- 每個資源對應一個唯一的 resource identifier
- 通過通用的介面 (generic connector interface) 對資源進行操作
- 對資源的各種操作不會改變 resource idetifier
- 所有的操作都是無態 (stateless) 的
對照到 web services 上來說:
- resource indentifier 是 URI
- generic connector interface 是 HTTP
最後看看可愛的影片說明就可以了解了!
- 將程式的狀態和功能拆解成資源Resource
- 每個獨立的url可以對應到相對的resource
- 而可以使用put get patch這種動作對resource操作
- 簡單的說就是 看到網址,就可以定義出對應到的資源
- 搭配動作可以對應到對於該資源的處理方式
參考資料及延伸閱讀:
哎呀不小心查太多資料了!就都貼上來囉XD