Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REST to RESTful Web Service

SJ Chou
January 13, 2014

REST to RESTful Web Service

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

SJ Chou

January 13, 2014
Tweet

More Decks by SJ Chou

Other Decks in Programming

Transcript

  1. 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
  2. REST Data Elements • Resources and Resource Identifiers 透過一個全域的資源識別命名來對應與實體 (Entity)

    間的關 係。 ex: HTTP URL • Representations 在超媒體網路中資源呈現的各種方式 ex: HTTP Content-Type
  3. 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
  4. REST Components • User Agent ex: Browser • Origin Server

    ex: Apache httpd, M$ IIS • Gateway • Proxy Components 透過 Connectors 進行訊息交換
  5. 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
  6. 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>
  7. 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>
  8. 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>
  9. 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>
  10. Web Service 傳統設計 (3) SOAP SOAP 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>
  11. 引述:How I Explained REST to My Wife 很遺憾,多數人為了達到同樣的目標,忙著用不同的方法創造出 複雜且不易使用的設計。不但名詞 (Nouns)

    不通用,且動詞 (Verbs) 也不多態。我們拋棄了過去幾十年的失敗經驗,再度重 蹈覆轍。我們使用 HTTP 不僅僅是幫助我們使用網路,而卻忽略 了 HTTP Simplicity 的設計初衷與理念,得到的卻是華而不實 而絢麗的工具。 http://bellsee2.blogspot.tw/2011/01/pagliacci.html
  12. 遵循 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
  13. RESTful Web Service 規格 功能 URL HTTP Method Resquest Response

    Status Code 新增 /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
  14. RESTful Web Service Cases Amazon AWS, eBay, Facebook, Yahoo Web

    Service, Hadoop API, Google Web Service...
  15. 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