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

REST to RESTful Web Service

Nov 22, 2014

Download

Technology

SJ Chou

從混沌的 Web 世界中,回頭探討 HTTP 最初的 REST 架構與精神,想想我們創造了什麼?也忽略了什麼?
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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