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
    to
    RESTful Web Service
    sj
    2011/09/28
    [email protected]
    http://blog.toright.com

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. REST 概念介紹

    View Slide

  8. 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

    View Slide

  9. REST Architectural Elements
    ●REST Data Elements
    ●REST Connectors
    ●REST Components

    View Slide

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

    View Slide

  11. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. RESTful Web Service

    View Slide

  16. 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

    View Slide

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

    View Slide

  18. Web Service 傳統設計 (1)
    ● Web Service 網址 /books
    ● 新增書籍
    create

    I hate the REST

    Response : ok|fail
    ● 修改書籍
    edit

    I hate REST very much

    Response : ok|fail

    View Slide

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

    View Slide

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



    ● 新增書籍 /books/create

    I hate the REST

    ● 修改書籍 /books/update

    I hate REST very much

    View Slide

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

    View Slide

  22. Web Service 傳統設計 (3) SOAP
    SOAP Request



    classifieds



    View Slide

  23. Web Service 傳統設計 (3) SOAP
    SOAP Response



    http://schemas...


    http://xxx.com/MyService

    28BC11433905662036



    classifieds



    View Slide

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

    View Slide

  25. 遵循 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

    View Slide

  26. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. 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

    View Slide

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

    View Slide