SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
REST 
to 
RESTful Web Service
sj
2011/09/28
sj@toright.com
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 設計

http://www.history.com/this-day-in-history/united-states-nicknamed-uncle-sam

Q : HTTP 不就是 REST 的實作了嗎??那到底該怎麼設計
RESTful Web Service ??
A : 只要善用 HTTP 就對了!!
傳統 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
Resquest
Method

新增

/books

POST

刪除

/books/{isbn} DELETE

修改

/books/{isbn} PUT

查詢

/books/{isbn} GET

<book isbn="A0100">
  <title>REST1</title>
</book>

Response

Status
Code
200|401

200|401|404
<book isbn="A0100">
  <title>REST2</title>
</book>

200|401|404

<book isbn="A0100"> 200|404
  <title>REST1</title>
</book>

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!

sj@toright.com
http://blog.toright.com

Contenu connexe

Tendances

データセンターネットワークの構成について
データセンターネットワークの構成についてデータセンターネットワークの構成について
データセンターネットワークの構成についてMicroAd, Inc.(Engineer)
 
Wireless network design hospital case study
Wireless network design hospital case studyWireless network design hospital case study
Wireless network design hospital case studynikshaikh786
 
Java で開発する Azure Web Apps アプリケーション
Java で開発する Azure Web Apps アプリケーションJava で開発する Azure Web Apps アプリケーション
Java で開発する Azure Web Apps アプリケーション彰 村地
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
PLNOG 7: Pierre Francois - BGP Add-Paths
PLNOG 7: Pierre Francois - BGP Add-PathsPLNOG 7: Pierre Francois - BGP Add-Paths
PLNOG 7: Pierre Francois - BGP Add-PathsPROIDEA
 
究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!Ryosuke Otsuya
 
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介Daisuke Ikeda
 
SQL Server Performance Tuning Essentials
SQL Server Performance Tuning EssentialsSQL Server Performance Tuning Essentials
SQL Server Performance Tuning EssentialsMasaki Hirose
 
Infootsing, infoallikad ja andmebaasid
Infootsing, infoallikad ja andmebaasidInfootsing, infoallikad ja andmebaasid
Infootsing, infoallikad ja andmebaasidHans Põldoja
 
Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Project Samurai
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncKoji Shinkubo
 
Hinemosのすゝめ(監視編)
Hinemosのすゝめ(監視編)Hinemosのすゝめ(監視編)
Hinemosのすゝめ(監視編)Hinemos
 
Custom PDFs from the DITA OT
Custom PDFs from the DITA OTCustom PDFs from the DITA OT
Custom PDFs from the DITA OTLeigh White
 
大規模負荷試験時にやったこと
大規模負荷試験時にやったこと大規模負荷試験時にやったこと
大規模負荷試験時にやったことまべ☆てっく運営
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Tendances (20)

Oracle Spatial 概要説明資料
Oracle Spatial 概要説明資料Oracle Spatial 概要説明資料
Oracle Spatial 概要説明資料
 
データセンターネットワークの構成について
データセンターネットワークの構成についてデータセンターネットワークの構成について
データセンターネットワークの構成について
 
Wireless network design hospital case study
Wireless network design hospital case studyWireless network design hospital case study
Wireless network design hospital case study
 
Java で開発する Azure Web Apps アプリケーション
Java で開発する Azure Web Apps アプリケーションJava で開発する Azure Web Apps アプリケーション
Java で開発する Azure Web Apps アプリケーション
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
PLNOG 7: Pierre Francois - BGP Add-Paths
PLNOG 7: Pierre Francois - BGP Add-PathsPLNOG 7: Pierre Francois - BGP Add-Paths
PLNOG 7: Pierre Francois - BGP Add-Paths
 
究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!
 
IIJmio meeting 31 音声通信の世界
IIJmio meeting 31 音声通信の世界IIJmio meeting 31 音声通信の世界
IIJmio meeting 31 音声通信の世界
 
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
 
My i2c
My i2cMy i2c
My i2c
 
SQL Server Performance Tuning Essentials
SQL Server Performance Tuning EssentialsSQL Server Performance Tuning Essentials
SQL Server Performance Tuning Essentials
 
Infootsing, infoallikad ja andmebaasid
Infootsing, infoallikad ja andmebaasidInfootsing, infoallikad ja andmebaasid
Infootsing, infoallikad ja andmebaasid
 
Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
Vect georef
Vect georefVect georef
Vect georef
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
 
Hinemosのすゝめ(監視編)
Hinemosのすゝめ(監視編)Hinemosのすゝめ(監視編)
Hinemosのすゝめ(監視編)
 
Custom PDFs from the DITA OT
Custom PDFs from the DITA OTCustom PDFs from the DITA OT
Custom PDFs from the DITA OT
 
大規模負荷試験時にやったこと
大規模負荷試験時にやったこと大規模負荷試験時にやったこと
大規模負荷試験時にやったこと
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

En vedette

WordPress Blog SEO 兩三事
WordPress Blog SEO 兩三事WordPress Blog SEO 兩三事
WordPress Blog SEO 兩三事家弘 周
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用Shengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制Shengyou Fan
 

En vedette (8)

WordPress Blog SEO 兩三事
WordPress Blog SEO 兩三事WordPress Blog SEO 兩三事
WordPress Blog SEO 兩三事
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 

Similaire à REST to RESTful Web Service

2015.07.17 新人報告(2)
2015.07.17 新人報告(2)2015.07.17 新人報告(2)
2015.07.17 新人報告(2)Chih-Wei Chuang
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
W3CTech美团react专场-Thinking in React
W3CTech美团react专场-Thinking in ReactW3CTech美团react专场-Thinking in React
W3CTech美团react专场-Thinking in React美团点评技术团队
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发topgeek
 
Moss 2007 の莱ノざ残
Moss 2007 の莱ノざ残Moss 2007 の莱ノざ残
Moss 2007 の莱ノざ残garylee310
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) My own sweet home!
 
影响搜索引擎排名的因素
影响搜索引擎排名的因素影响搜索引擎排名的因素
影响搜索引擎排名的因素YUCHENG HU
 
Ruby rails分享
Ruby rails分享Ruby rails分享
Ruby rails分享Cam Song
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
Restful & odata using asp.net web api
Restful & odata using asp.net web apiRestful & odata using asp.net web api
Restful & odata using asp.net web api昱劭 劉
 
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境MIS2000 Lab.
 
百度优化指南 V2
百度优化指南 V2百度优化指南 V2
百度优化指南 V2hanchengluo
 
Restful
RestfulRestful
Restfulmedcl
 
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseAPI Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseSzuping Wang
 
百度互联网创业俱乐部搜索引擎优化指南
百度互联网创业俱乐部搜索引擎优化指南百度互联网创业俱乐部搜索引擎优化指南
百度互联网创业俱乐部搜索引擎优化指南liang47
 

Similaire à REST to RESTful Web Service (19)

2015.07.17 新人報告(2)
2015.07.17 新人報告(2)2015.07.17 新人報告(2)
2015.07.17 新人報告(2)
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Web教程2
Web教程2Web教程2
Web教程2
 
W3CTech美团react专场-Thinking in React
W3CTech美团react专场-Thinking in ReactW3CTech美团react专场-Thinking in React
W3CTech美团react专场-Thinking in React
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发
 
Moss 2007 の莱ノざ残
Moss 2007 の莱ノざ残Moss 2007 の莱ノざ残
Moss 2007 の莱ノざ残
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
 
影响搜索引擎排名的因素
影响搜索引擎排名的因素影响搜索引擎排名的因素
影响搜索引擎排名的因素
 
Ruby rails分享
Ruby rails分享Ruby rails分享
Ruby rails分享
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
Restful & odata using asp.net web api
Restful & odata using asp.net web apiRestful & odata using asp.net web api
Restful & odata using asp.net web api
 
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
 
RESTful
RESTfulRESTful
RESTful
 
百度优化指南 V2
百度优化指南 V2百度优化指南 V2
百度优化指南 V2
 
Restful
RestfulRestful
Restful
 
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseAPI Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime database
 
百度互联网创业俱乐部搜索引擎优化指南
百度互联网创业俱乐部搜索引擎优化指南百度互联网创业俱乐部搜索引擎优化指南
百度互联网创业俱乐部搜索引擎优化指南
 

Plus de 家弘 周

2020 MLaaS 產業介紹.pdf
2020 MLaaS 產業介紹.pdf2020 MLaaS 產業介紹.pdf
2020 MLaaS 產業介紹.pdf家弘 周
 
用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning家弘 周
 
Linux Container Introduction
Linux Container IntroductionLinux Container Introduction
Linux Container Introduction家弘 周
 
Cloud Foundry Introduction
Cloud Foundry IntroductionCloud Foundry Introduction
Cloud Foundry Introduction家弘 周
 
區塊鏈共識機制與 EOS
區塊鏈共識機制與 EOS區塊鏈共識機制與 EOS
區塊鏈共識機制與 EOS家弘 周
 
簡單線性回歸 & K-Means (Machine learning)
簡單線性回歸 & K-Means (Machine learning)簡單線性回歸 & K-Means (Machine learning)
簡單線性回歸 & K-Means (Machine learning)家弘 周
 
SEO 武林天下
SEO 武林天下SEO 武林天下
SEO 武林天下家弘 周
 
MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家家弘 周
 
敏捷開花那些小事
敏捷開花那些小事敏捷開花那些小事
敏捷開花那些小事家弘 周
 
小猴子也會的 Ubuntu Desktop 14.04 安裝教學
小猴子也會的 Ubuntu Desktop 14.04 安裝教學小猴子也會的 Ubuntu Desktop 14.04 安裝教學
小猴子也會的 Ubuntu Desktop 14.04 安裝教學家弘 周
 
軟體品質與持續整合
軟體品質與持續整合軟體品質與持續整合
軟體品質與持續整合家弘 周
 
Caching in HTTP
Caching in HTTPCaching in HTTP
Caching in HTTP家弘 周
 
The Clean Coder - 預估與壓力 (書摘)
The Clean Coder - 預估與壓力 (書摘)The Clean Coder - 預估與壓力 (書摘)
The Clean Coder - 預估與壓力 (書摘)家弘 周
 

Plus de 家弘 周 (13)

2020 MLaaS 產業介紹.pdf
2020 MLaaS 產業介紹.pdf2020 MLaaS 產業介紹.pdf
2020 MLaaS 產業介紹.pdf
 
用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning
 
Linux Container Introduction
Linux Container IntroductionLinux Container Introduction
Linux Container Introduction
 
Cloud Foundry Introduction
Cloud Foundry IntroductionCloud Foundry Introduction
Cloud Foundry Introduction
 
區塊鏈共識機制與 EOS
區塊鏈共識機制與 EOS區塊鏈共識機制與 EOS
區塊鏈共識機制與 EOS
 
簡單線性回歸 & K-Means (Machine learning)
簡單線性回歸 & K-Means (Machine learning)簡單線性回歸 & K-Means (Machine learning)
簡單線性回歸 & K-Means (Machine learning)
 
SEO 武林天下
SEO 武林天下SEO 武林天下
SEO 武林天下
 
MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家
 
敏捷開花那些小事
敏捷開花那些小事敏捷開花那些小事
敏捷開花那些小事
 
小猴子也會的 Ubuntu Desktop 14.04 安裝教學
小猴子也會的 Ubuntu Desktop 14.04 安裝教學小猴子也會的 Ubuntu Desktop 14.04 安裝教學
小猴子也會的 Ubuntu Desktop 14.04 安裝教學
 
軟體品質與持續整合
軟體品質與持續整合軟體品質與持續整合
軟體品質與持續整合
 
Caching in HTTP
Caching in HTTPCaching in HTTP
Caching in HTTP
 
The Clean Coder - 預估與壓力 (書摘)
The Clean Coder - 預估與壓力 (書摘)The Clean Coder - 預估與壓力 (書摘)
The Clean Coder - 預估與壓力 (書摘)
 

REST to RESTful Web Service

  • 2. Representational State Transfer 2000 年 Dr. Roy Fielding 提 出的博士論文  RFC 2616 的基礎 / Web 的聖經
  • 4. What is RESTful ?? 美麗 (beauty) 的事物可以稱為 Beautiful 同理可證 設計為 REST 的系統我們就稱為 RESTful
  • 5. 導讀推薦文章 How I Explained REST to My Wife 作者:Ryan Tomayko
  • 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
  • 9. REST Architectural Elements ● REST Data Elements ● REST Connectors ● REST Components
  • 10. REST Data Elements ● Resources and Resource Identifiers 透過一個全域的資源識別命名來對應與實體 (Entity) 間的關 係。 ex: HTTP URL ● Representations 在超媒體網路中資源呈現的各種方式 ex: HTTP Content-Type
  • 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
  • 12. REST Components ● User Agent   ex: Browser ● Origin Server ex: Apache httpd, M$ IIS ● Gateway ● Proxy Components 透過 Connectors 進行訊息交換
  • 14. HTTP 本身就是 REST 的實作! http://news.sina.com.tw/books/history/barticle/15368.html
  • 16. What is RESTful Web Service ?? ● 符合 REST  Constraints 的 Web Service 設計 http://www.history.com/this-day-in-history/united-states-nicknamed-uncle-sam Q : HTTP 不就是 REST 的實作了嗎??那到底該怎麼設計 RESTful Web Service ?? A : 只要善用 HTTP 就對了!!
  • 17. 傳統 Web Service 設計 ● 設計書籍管理系統 ● 新增、刪除、修改、查詢 - CRUD ● XML Web Service
  • 18. 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>
  • 19. 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>
  • 20. 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>
  • 21. Web Service 傳統設計 (2) 改良!? ● 刪除書籍 /books/delete <isbn>A0010</isbn> ● 查詢書籍 /books/get <isbn>A0010</isbn>
  • 22. 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>
  • 23. 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>
  • 24. 引述:How I Explained REST to My Wife 很遺憾,多數人為了達到同樣的目標,忙著用不同的方法創造出 複雜且不易使用的設計。不但名詞 (Nouns) 不通用,且動詞 (Verbs) 也不多態。我們拋棄了過去幾十年的失敗經驗,再度重 蹈覆轍。我們使用 HTTP 不僅僅是幫助我們使用網路,而卻忽略 了 HTTP Simplicity 的設計初衷與理念,得到的卻是華而不實 而絢麗的工具。 http://bellsee2.blogspot.tw/2011/01/pagliacci.html
  • 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
  • 26. RESTful Web Service 規格 功能 URL HTTP Resquest Method 新增 /books POST 刪除 /books/{isbn} DELETE 修改 /books/{isbn} PUT 查詢 /books/{isbn} GET <book isbn="A0100">   <title>REST1</title> </book> Response Status Code 200|401 200|401|404 <book isbn="A0100">   <title>REST2</title> </book> 200|401|404 <book isbn="A0100"> 200|404   <title>REST1</title> </book> Content-type:application/xml, allpication/json, text/html
  • 27. Conclusion 直覺、簡單、快速 再次實作 HTTP 已經擁有的功能是多餘的 善用 HTTP 就是實現 RESTful 的好方法 『簡單』才是系統設計最佳法則
  • 28. RESTful Web Service Cases Amazon AWS, eBay, Facebook, Yahoo Web Service, Hadoop API, Google Web Service...
  • 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