從混沌的 Web 世界中,回頭探討 HTTP 最初的 REST 架構與精神,想想我們創造了什麼?也忽略了什麼?
RESTtoRESTful Web Servicesj2011/09/28[email protected]http://blog.toright.com
View Slide
Representational StateTransfer2000 年 Dr. Roy Fielding 提出的博士論文RFC 2616 的基礎 / Web 的聖經
REST 不是標準或協定REST 是一種軟體設計架構風格http://www.techcn.com.cn/index.php?doc-view-146097.html
What is RESTful ??美麗 (beauty) 的事物可以稱為 Beautiful同理可證設計為 REST 的系統我們就稱為 RESTful
How I Explained REST to My Wife作者:Ryan Tomayko導讀推薦文章
使用 Internet 是一件簡單且直覺的動作就像是豐富的名詞加上多態的動詞
REST 概念介紹
REST Constraints● Client-Server● Stateless - 無狀態設計● Cacheable - 可實作快取● Uniform Interface - 一致性的介面○Identification of resources - 唯一的資源識別○Manipulation of resources - 特定的操作方法○Self-descriptive messages - 訊息自我描述○Hypermedia as the engine of application state - !?● Layered System - 層級式架構● Code-On-Demand (optional) - 像是 JavaScript
REST Architectural Elements●REST Data Elements●REST Connectors●REST Components
REST Data Elements● Resources and Resource Identifiers透過一個全域的資源識別命名來對應與實體 (Entity) 間的關係。ex: HTTP URL● Representations在超媒體網路中資源呈現的各種方式ex: HTTP Content-Type
REST Connectors● Clientex: HTTP Client Library● Serverex: Apache API● Cacheex: Browser Cache, Network Cache● Resolverex: DNS lookup● Tunnelex: SOCKS, SSL
REST Components● User Agentex: Browser● Origin Serverex: Apache httpd, M$ IIS● Gateway● ProxyComponents 透過 Connectors 進行訊息交換
REST 到底是什麼!?http://futbol1.io.ua/s381473/sistema_super_bystroy_podgotovki_futbolistov_vysshego_klassa
HTTP 本身就是 REST 的實作!http://news.sina.com.tw/books/history/barticle/15368.html
RESTful Web Service
What is RESTful Web Service ??● 符合 REST Constraints 的 Web Service 設計Q : HTTP 不就是 REST 的實作了嗎??那到底該怎麼設計RESTful Web Service ??A : 只要善用 HTTP 就對了!!http://www.history.com/this-day-in-history/united-states-nicknamed-uncle-sam
傳統 Web Service 設計●設計書籍管理系統●新增、刪除、修改、查詢 - CRUD●XML Web Service
Web Service 傳統設計 (1)● Web Service 網址 /books● 新增書籍createI hate the RESTResponse : ok|fail● 修改書籍editI hate REST very muchResponse : ok|fail
Web Service 傳統設計 (1)● 刪除書籍deleteA0010Response : ok|fail● 查詢書籍searchA0010Response : ok|fail
Web Service 傳統設計 (2) 改良!?● 更直覺的網址、更簡易 XML 內文、更通用的回應格式● 新增書籍 /books/createI hate the REST● 修改書籍 /books/updateI hate REST very much
Web Service 傳統設計 (2) 改良!?● 刪除書籍 /books/deleteA0010● 查詢書籍 /books/getA0010
Web Service 傳統設計 (3) SOAPSOAP Requestclassifieds
Web Service 傳統設計 (3) SOAPSOAP Responsehttp://schemas...http://xxx.com/MyService28BC11433905662036classifieds
引述:How I Explained REST to My Wife很遺憾,多數人為了達到同樣的目標,忙著用不同的方法創造出複雜且不易使用的設計。不但名詞 (Nouns) 不通用,且動詞(Verbs) 也不多態。我們拋棄了過去幾十年的失敗經驗,再度重蹈覆轍。我們使用 HTTP 不僅僅是幫助我們使用網路,而卻忽略了 HTTP Simplicity 的設計初衷與理念,得到的卻是華而不實而絢麗的工具。http://bellsee2.blogspot.tw/2011/01/pagliacci.html
遵循 HTTP 設計 RESTful Web Service● Nouns為你的資源進行 URL 定義● Verbs選擇適合的 Method 動詞GET, POST, PUT, DELETE● Content Types選擇 Content-typeex: XML / JSON / HTMLhttp://www.onlamp.com/pub/a/onlamp/2008/02/19/developing-restful-web-services-in-perl.html
RESTful Web Service 規格功能 URL HTTPMethodResquest Response StatusCode新增 /books POST REST1200|401刪除 /books/{isbn} DELETE 200|401|404修改 /books/{isbn} PUT REST2200|401|404查詢 /books/{isbn} GET REST1200|404Content-type:application/xml, allpication/json,text/html
Conclusion直覺、簡單、快速再次實作 HTTP 已經擁有的功能是多餘的善用 HTTP 就是實現 RESTful 的好方法『簡單』才是系統設計最佳法則
RESTful Web Service CasesAmazon AWS, eBay, Facebook,Yahoo Web Service, Hadoop API,Google Web Service...
and you !?http://www.superhappiness.com/albert-einstein.html
References● Ryan Tomayko - How I Explained REST to My Wife● SOUL & SHELL BLOG - 淺談 REST 軟體架構風格 (Part.I)– 從了解 REST 到設計 RESTful!● SOUL & SHELL BLOG - 淺談 REST 軟體架構風格 (Part.II) – 如何設計 RESTful Web Service?● Architectural Styles andthe Design of Network-basedSoftware Architectures
The EndThanks![email protected]http://blog.toright.com