Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
REST to RESTful Web Service
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
SJ Chou
January 13, 2014
Programming
230
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
REST to RESTful Web Service
從混沌的 Web 世界中,回頭探討 HTTP 最初的 REST 架構與精神,想想我們創造了什麼?也忽略了什麼?
SJ Chou
January 13, 2014
More Decks by SJ Chou
See All by SJ Chou
LangChain Framework 與 RAG 實做教學
samejack
1
22
LLM RAG 擷取增強生成介紹 - 3 種 RAG/Self-RAG/CRAG 全解析
samejack
1
130
NVIDIA Omniverse Kit Introduction
samejack
1
99
用 Keras 玩 Machine Learning
samejack
1
170
2020 MLaaS 產業介紹
samejack
1
100
Linux Container Introduction
samejack
1
60
Cloud Foundry Introduction
samejack
1
100
WordPress Blog SEO 兩三事
samejack
1
88
小猴子也會的 Ubuntu Desktop 14.04 安裝教學
samejack
1
130
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
620
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
770
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
140
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7.1k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
220
The NotImplementedError Problem in Ruby
koic
1
1k
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.7k
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
6k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
160
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
270
Claude Code のすすめ
schroneko
67
230k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
190
Building Flexible Design Systems
yeseniaperezcruz
330
40k
New Earth Scene 8
popppiees
3
2.4k
Why Our Code Smells
bkeepers
PRO
340
58k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
760
Color Theory Basics | Prateek | Gurzu
gurzu
0
380
A Soul's Torment
seathinner
6
3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Transcript
REST to RESTful Web Service sj 2011/09/28
[email protected]
http://blog.toright.com
Representational State Transfer 2000 年 Dr. Roy Fielding 提 出的博士論文
RFC 2616 的基礎 / Web 的聖經
REST 不是標準或協定 REST 是一種軟體設計架構風格 http://www.techcn.com.cn/index.php?doc-view-146097.html
What is RESTful ?? 美麗 (beauty) 的事物可以稱為 Beautiful 同理可證 設計為
REST 的系統我們就稱為 RESTful
How I Explained REST to My Wife 作者:Ryan Tomayko 導讀推薦文章
使用 Internet 是一件簡單且 直覺的動作 就像是豐富的名詞加上多態的動詞
REST 概念介紹
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
REST Architectural Elements •REST Data Elements •REST Connectors •REST Components
REST Data Elements • Resources and Resource Identifiers 透過一個全域的資源識別命名來對應與實體 (Entity)
間的關 係。 ex: HTTP URL • Representations 在超媒體網路中資源呈現的各種方式 ex: HTTP Content-Type
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
REST Components • User Agent ex: Browser • Origin Server
ex: Apache httpd, M$ IIS • Gateway • Proxy Components 透過 Connectors 進行訊息交換
REST 到底是什麼!? http://futbol1.io.ua/s381473/sistema_super_bystroy_podgotovki_futbolistov_vysshego_klassa
HTTP 本身就是 REST 的實作! http://news.sina.com.tw/books/history/barticle/15368.html
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
傳統 Web Service 設計 •設計書籍管理系統 •新增、刪除、修改、查詢 - CRUD •XML 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>
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>
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>
Web Service 傳統設計 (2) 改良!? • 刪除書籍 /books/delete <isbn>A0010</isbn> •
查詢書籍 /books/get <isbn>A0010</isbn>
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>
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>
引述:How I Explained REST to My Wife 很遺憾,多數人為了達到同樣的目標,忙著用不同的方法創造出 複雜且不易使用的設計。不但名詞 (Nouns)
不通用,且動詞 (Verbs) 也不多態。我們拋棄了過去幾十年的失敗經驗,再度重 蹈覆轍。我們使用 HTTP 不僅僅是幫助我們使用網路,而卻忽略 了 HTTP Simplicity 的設計初衷與理念,得到的卻是華而不實 而絢麗的工具。 http://bellsee2.blogspot.tw/2011/01/pagliacci.html
遵循 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
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
Conclusion 直覺、簡單、快速 再次實作 HTTP 已經擁有的功能是多餘的 善用 HTTP 就是實現 RESTful 的好方法
『簡單』才是系統設計最佳法則
RESTful Web Service Cases Amazon AWS, eBay, Facebook, Yahoo Web
Service, Hadoop API, Google Web Service...
and you !? http://www.superhappiness.com/albert-einstein.html
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
The End Thanks!
[email protected]
http://blog.toright.com