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

REST to RESTful Web Service

  • Upload
    sj-chou

  • View
    11.154

  • Download
    4

Embed Size (px)

DESCRIPTION

從混沌的 Web 世界中,回頭探討 HTTP 最初的 REST 架構與精神,想想我們創造了什麼?也忽略了什麼?

Citation preview

Page 2: REST to RESTful Web Service

Representational State Transfer

2000 年 Dr. Roy Fielding 提出的博士論文 

RFC 2616 的基礎 / Web 的聖經

Page 3: REST to RESTful Web Service

REST 不是標準或協定REST 是一種軟體設計架構風格

http://www.techcn.com.cn/index.php?doc-view-146097.html

Page 4: REST to RESTful Web Service

What is RESTful ??

美麗 (beauty) 的事物可以稱為 Beautiful

同理可證

設計為 REST 的系統我們就稱為 RESTful

Page 5: REST to RESTful Web Service

How I Explained REST to My Wife

作者:Ryan Tomayko

導讀推薦文章

Page 6: REST to RESTful Web Service

使用 Internet 是一件簡單且直覺的動作

就像是豐富的名詞加上多態的動詞

Page 7: REST to RESTful Web Service

REST 概念介紹

 

Page 8: REST to RESTful Web Service

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

Page 9: REST to RESTful Web Service

REST Architectural Elements

●REST Data Elements●REST Connectors●REST Components

Page 10: REST to RESTful Web Service

REST Data Elements

● Resources and Resource Identifiers透過一個全域的資源識別命名來對應與實體 (Entity) 間的關係。ex: HTTP URL

● Representations在超媒體網路中資源呈現的各種方式ex: HTTP Content-Type

Page 11: REST to RESTful Web Service

REST Connectors

● Clientex: HTTP Client Library

● Serverex: Apache API

● Cacheex: Browser Cache, Network Cache

● Resolverex: DNS lookup

● Tunnelex: SOCKS, SSL

Page 12: REST to RESTful Web Service

REST Components

● User Agentex: Browser

● Origin Serverex: Apache httpd, M$ IIS

● Gateway● Proxy

 

Components 透過 Connectors 進行訊息交換

Page 13: REST to RESTful Web Service

REST 到底是什麼!?

http://futbol1.io.ua/s381473/sistema_super_bystroy_podgotovki_futbolistov_vysshego_klassa

Page 14: REST to RESTful Web Service

HTTP 本身就是 REST 的實作!

http://news.sina.com.tw/books/history/barticle/15368.html

Page 15: REST to RESTful Web Service

RESTful Web Service

 

Page 16: REST to 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

Page 17: REST to RESTful Web Service

傳統 Web Service 設計

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

Page 18: REST to RESTful Web Service

Web Service 傳統設計 (1)● Web Service 網址 /books

●新增書籍<action>create</action><book isbn="A0100">    <title>I hate the REST</title></book>Response : <status>ok|fail</status>

●修改書籍<action>edit</action><book isbn="A0100">    <title>I hate REST very much</title></book>Response : <status>ok|fail</status>

Page 19: REST to RESTful Web Service

Web Service 傳統設計 (1)

●刪除書籍<action>delete</action><isbn>A0010</isbn>Response : <status>ok|fail</status>

●查詢書籍<action>search</action><isbn>A0010</isbn>Response : <status>ok|fail</status>

Page 20: REST to RESTful Web Service

Web Service 傳統設計 (2) 改良!?●更直覺的網址、更簡易 XML 內文、更通用的回應格式

<response code="0" messgae="ok">    <data/></respone>

●新增書籍 /books/create<book isbn="A0100">    <title>I hate the REST</title></book>

●修改書籍 /books/update<book isbn="A0100">    <title>I hate REST very much</title></book>

Page 21: REST to RESTful Web Service

Web Service 傳統設計 (2) 改良!?

●刪除書籍 /books/delete<isbn>A0010</isbn>

●查詢書籍 /books/get<isbn>A0010</isbn>

Page 22: REST to RESTful Web Service

Web Service 傳統設計 (3) SOAP

SOAP Request<soapenv:Envelope>  <soapenv:Body>    <req:echo xmlns:req="http://xxx.com/MyService/">      <req:category>classifieds</req:category>    </req:echo>  </soapenv:Body></soapenv:Envelope>

Page 23: REST to RESTful Web Service

Web Service 傳統設計 (3) SOAPSOAP Response<soapenv:Envelope>  <soapenv:Header>    <wsa:ReplyTo>      <wsa:Address>http://schemas...</wsa:Address>    </wsa:ReplyTo>    <wsa:From>      <wsa:Address>http://xxx.com/MyService</wsa:Address>    </wsa:From>    <wsa:MessageID>28BC11433905662036</wsa:MessageID>  </soapenv:Header>  <soapenv:Body>    <req:echo xmlns:req="http://xxx.com/MyService">      <req:category>classifieds</req:category>    </req:echo>  </soapenv:Body></soapenv:Envelope>

Page 24: REST to RESTful Web Service

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

http://bellsee2.blogspot.tw/2011/01/pagliacci.html

Page 25: REST to RESTful Web Service

遵循 HTTP 設計 RESTful Web Service

● Nouns為你的資源進行 URL 定義

● Verbs選擇適合的 Method 動詞GET, POST, PUT, DELETE

● Content Types選擇 Content-typeex: XML / JSON / HTML

http://www.onlamp.com/pub/a/onlamp/2008/02/19/developing-restful-web-services-in-perl.html

Page 26: REST to RESTful Web Service

RESTful Web Service 規格

功能 URL HTTP Method

Resquest Response StatusCode

新增 /books POST <book isbn="A0100">  <title>REST1</title></book>

200|401

刪除 /books/{isbn} DELETE 200|401|404

修改 /books/{isbn} PUT <book isbn="A0100">  <title>REST2</title></book>

200|401|404

查詢 /books/{isbn} GET <book isbn="A0100">  <title>REST1</title></book>

200|404

Content-type:application/xml, allpication/json, text/html

Page 27: REST to RESTful Web Service

Conclusion

直覺、簡單、快速再次實作 HTTP 已經擁有的功能是多餘的善用 HTTP 就是實現 RESTful 的好方法

『簡單』才是系統設計最佳法則

Page 28: REST to RESTful Web Service

RESTful Web Service Cases

Amazon AWS, eBay, Facebook, Yahoo Web Service, Hadoop API,

Google Web Service...

Page 29: REST to RESTful Web Service

and you !?

http://www.superhappiness.com/albert-einstein.html