Slide 1

Slide 1 text

REST to RESTful Web Service sj 2011/09/28 [email protected] http://blog.toright.com

Slide 2

Slide 2 text

Representational State Transfer 2000 年 Dr. Roy Fielding 提 出的博士論文 RFC 2616 的基礎 / Web 的聖經

Slide 3

Slide 3 text

REST 不是標準或協定 REST 是一種軟體設計架構風格 http://www.techcn.com.cn/index.php?doc-view-146097.html

Slide 4

Slide 4 text

What is RESTful ?? 美麗 (beauty) 的事物可以稱為 Beautiful 同理可證 設計為 REST 的系統我們就稱為 RESTful

Slide 5

Slide 5 text

How I Explained REST to My Wife 作者:Ryan Tomayko 導讀推薦文章

Slide 6

Slide 6 text

使用 Internet 是一件簡單且 直覺的動作 就像是豐富的名詞加上多態的動詞

Slide 7

Slide 7 text

REST 概念介紹

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

REST Architectural Elements ●REST Data Elements ●REST Connectors ●REST Components

Slide 10

Slide 10 text

REST Data Elements ● Resources and Resource Identifiers 透過一個全域的資源識別命名來對應與實體 (Entity) 間的關 係。 ex: HTTP URL ● Representations 在超媒體網路中資源呈現的各種方式 ex: HTTP Content-Type

Slide 11

Slide 11 text

REST Connectors ● Client ex: HTTP Client Library ● Server ex: Apache API ● Cache ex: Browser Cache, Network Cache ● Resolver ex: DNS lookup ● Tunnel ex: SOCKS, SSL

Slide 12

Slide 12 text

REST Components ● User Agent ex: Browser ● Origin Server ex: Apache httpd, M$ IIS ● Gateway ● Proxy Components 透過 Connectors 進行訊息交換

Slide 13

Slide 13 text

REST 到底是什麼!? http://futbol1.io.ua/s381473/sistema_super_bystroy_podgotovki_futbolistov_vysshego_klassa

Slide 14

Slide 14 text

HTTP 本身就是 REST 的實作! http://news.sina.com.tw/books/history/barticle/15368.html

Slide 15

Slide 15 text

RESTful Web Service

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

傳統 Web Service 設計 ●設計書籍管理系統 ●新增、刪除、修改、查詢 - CRUD ●XML Web Service

Slide 18

Slide 18 text

Web Service 傳統設計 (1) ● Web Service 網址 /books ● 新增書籍 create I hate the REST Response : ok|fail ● 修改書籍 edit I hate REST very much Response : ok|fail

Slide 19

Slide 19 text

Web Service 傳統設計 (1) ● 刪除書籍 delete A0010 Response : ok|fail ● 查詢書籍 search A0010 Response : ok|fail

Slide 20

Slide 20 text

Web Service 傳統設計 (2) 改良!? ● 更直覺的網址、更簡易 XML 內文、更通用的回應格式 ● 新增書籍 /books/create I hate the REST ● 修改書籍 /books/update I hate REST very much

Slide 21

Slide 21 text

Web Service 傳統設計 (2) 改良!? ● 刪除書籍 /books/delete A0010 ● 查詢書籍 /books/get A0010

Slide 22

Slide 22 text

Web Service 傳統設計 (3) SOAP SOAP Request classifieds

Slide 23

Slide 23 text

Web Service 傳統設計 (3) SOAP SOAP Response http://schemas... http://xxx.com/MyService 28BC11433905662036 classifieds

Slide 24

Slide 24 text

引述:How I Explained REST to My Wife 很遺憾,多數人為了達到同樣的目標,忙著用不同的方法創造出 複雜且不易使用的設計。不但名詞 (Nouns) 不通用,且動詞 (Verbs) 也不多態。我們拋棄了過去幾十年的失敗經驗,再度重 蹈覆轍。我們使用 HTTP 不僅僅是幫助我們使用網路,而卻忽略 了 HTTP Simplicity 的設計初衷與理念,得到的卻是華而不實 而絢麗的工具。 http://bellsee2.blogspot.tw/2011/01/pagliacci.html

Slide 25

Slide 25 text

遵循 HTTP 設計 RESTful Web Service ● Nouns 為你的資源進行 URL 定義 ● Verbs 選擇適合的 Method 動詞 GET, POST, PUT, DELETE ● Content Types 選擇 Content-type ex: XML / JSON / HTML http://www.onlamp.com/pub/a/onlamp/2008/02/19/developing-restful-web-services-in-perl.html

Slide 26

Slide 26 text

RESTful Web Service 規格 功能 URL HTTP Method Resquest Response Status Code 新增 /books POST REST1 200|401 刪除 /books/{isbn} DELETE 200|401|404 修改 /books/{isbn} PUT REST2 200|401|404 查詢 /books/{isbn} GET REST1 200|404 Content-type:application/xml, allpication/json, text/html

Slide 27

Slide 27 text

Conclusion 直覺、簡單、快速 再次實作 HTTP 已經擁有的功能是多餘的 善用 HTTP 就是實現 RESTful 的好方法 『簡單』才是系統設計最佳法則

Slide 28

Slide 28 text

RESTful Web Service Cases Amazon AWS, eBay, Facebook, Yahoo Web Service, Hadoop API, Google Web Service...

Slide 29

Slide 29 text

and you !? http://www.superhappiness.com/albert-einstein.html

Slide 30

Slide 30 text

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-based Software Architectures

Slide 31

Slide 31 text

The End Thanks! [email protected] http://blog.toright.com