SlideShare a Scribd company logo
1 of 54
Design REST-ful Web Service - Use Spring MVC as Example kevingo
REpresentationalState Transfer Apache co-founder Apache HTTP Server project developer HTTP 1.0 / 1.1 spec author Roy T. Fielding http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
A style of software architecture for distributed hypermedia systems.
REST 是一種軟體架構風格適合用來開發Web Service
WHO USE REST
WHO USE REST
向主流靠攏!
萬物皆資源 Any information that can be named can be a resource { 'obj1': {  'child1':'value1',   'child2':'value2'  },  'array1': [1, 2, 3, 4, 5]} <People>      <name>Fu</name>      <Age>10</Age> </People>
任何資源都用URL表達 http://itri.com/proj/i236 http://itri.com/people/kevingo
相同資源,格式可能不同 http://xxx.com/article
回想REST的全名… REpresentational 對於資源在特定時刻的狀態的描述 State 資源的狀態 Transfer 資源在ClientSide和Server Side之間的轉移
REST 說穿了 … Service Provider 我要 XXX 透過HTTP 這是 OOO
RESTful ?
RESTful … forget -> forgetful : 忘記 -> 健忘的 color -> colorful : 顏色 -> 多顏色的 peace -> peaceful : 和平 -> 和平的 ….
同理可證
REST->RESTful 符合REST規範的
REST到底規範了什麼?
使用URL來表達資源 工研院的i236計畫 http://itri.org/project/i236 參與工研院paas計畫的人員 http://itri.org/project/paas/people
利用HTTP定義的動詞方法來進行資源的操作 GET POST PUT DELETE
Communicate Stateless
其他還有… Cacheable Client–server Layered system Code on demand
RESTful URL design
http://itri.org/addProject?name=i236 http://itri.org/showProject?name=i236 http://itri.org/deleteProject?name=i236 http://itri.org/editProject?name=i236
GET http://itri.org/project/i236 DELETE POST PUT
REST的優點 Scalability - stateless 搜尋引擎喜歡Clean URL 統一的存取介面 –HTTPMethod 使用HTTP Catch和proxy server提高負載程度
關於HTTP方法我們可以懂得更多
Spring MVC REST in Java Spring 3.0
annotation-based programming model
使用annotation減少繼承宣告 配合context:component-scan 減少XML設定文件
@Controller 聲明這是一個Controller類別
@Controller public class ProjectController {…} 取代 public class ProjectController extends xxxController {…}
@RequestMapping 將請求轉交至對應的類別或方法
可以用在類別上 @Controller @RequestMapping(value=“/projects”) public class ProjectController {…} 也可以用在方法上 @RequestMapping(value=“/projects”) public ModelAndView show() {…}
還可以指定請求的方法 @RequestMapping(value=“/projects”,  method=RequestMethod.POST) public ModelAndView show() {…} 連請求的header都可以指定 @RequestMapping(headers=“content-type=text/*”) public ModelAndView show() {…}
@PathVariable 將URL的參數和方法的參數 進行綁定
URL參數會傳入方法中 @RequestMapping(“/project/{name}”) public ModelAndView show(@PathVariable String name) {…}
萬事俱備只欠東風
瀏覽器只支援GET和POST
貼心的Spring幫我們解決… 在web.xml加入HiddenHttpMethodFilter 1 使用spring form tag來指定http method (PUT or DELETE) 2 其實是用POST發出請求,只是偷偷塞了一個hidden field來放真正的HTTP Method 3 HiddenHttpMethodFilter會根據真正的HTTP Method幫我們轉發到正確的Controller
<form:form action="project" method="delete">     <input type="submit" value="Delete Project" name=“i236" /> </form:form> <form id="command" action="project/i236" method="post"> <input type="hidden" name="_method" value="delete"/>  <input type="submit" value="Delete i236" name="i236" />  </form>
偷偷看一下原始碼…
還有什麼?
每次要使用REST都要產生一個form?
使用RestTemplate類別輕鬆呼叫RESTResources 謝謝Spring 3.0
GET – getForObject POST – postForObject PUT – put DELETE – delete 	…..  http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html
還有一點點問題…
怎麼做?
三種作法 在Request Header裡面宣告 GET /project/i236  HTTP/1.1 Accept: text/html GET/project/i236  HTTP/1.1 Accept: application/json ,[object Object]
使用額外參數/project/i236.json /project/i236.html /project/i236?format=json /project/i236?format=html
ContentNegotiatingViewResolver 支援瀏覽器Request Header 支援副檔名
瀏覽器Request Header 不同的瀏覽器支援的格式不同 ,[object Object]
application/xhtml+xml
 application/xml

More Related Content

Similar to Design REST-ful Web Service

zendframework2 restful
zendframework2 restfulzendframework2 restful
zendframework2 restfultom_li
 
Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB WSO2
 
Restful web services_tutorial
Restful web services_tutorialRestful web services_tutorial
Restful web services_tutorialphilip75020
 
Ellerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationEllerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationAlex Henderson
 
RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座Li Yi
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011Alessandro Nadalin
 
Developing on the aloashbei platform
Developing on the aloashbei platformDeveloping on the aloashbei platform
Developing on the aloashbei platformpycharmer
 
RESTful API-centric Universe
RESTful API-centric UniverseRESTful API-centric Universe
RESTful API-centric UniverseTihomir Opačić
 
JAX-RS. Developing RESTful APIs with Java
JAX-RS. Developing RESTful APIs with JavaJAX-RS. Developing RESTful APIs with Java
JAX-RS. Developing RESTful APIs with JavaJerry Kurian
 
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!Evan Mullins
 
Php Interview Questions
Php Interview QuestionsPhp Interview Questions
Php Interview QuestionsUmeshSingh159
 
How to build a rest api
How to build a rest apiHow to build a rest api
How to build a rest apiHoang Nguyen
 
Rapid RESTful Web Applications with Apache Sling and Jackrabbit
Rapid RESTful Web Applications with Apache Sling and JackrabbitRapid RESTful Web Applications with Apache Sling and Jackrabbit
Rapid RESTful Web Applications with Apache Sling and JackrabbitCraig Dickson
 
Oracle REST Data Services
Oracle REST Data ServicesOracle REST Data Services
Oracle REST Data ServicesChris Muir
 
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...Nguyen Duc Phu
 

Similar to Design REST-ful Web Service (20)

zendframework2 restful
zendframework2 restfulzendframework2 restful
zendframework2 restful
 
Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB
 
REST API Laravel
REST API LaravelREST API Laravel
REST API Laravel
 
Restful web services_tutorial
Restful web services_tutorialRestful web services_tutorial
Restful web services_tutorial
 
Ellerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationEllerslie User Group - ReST Presentation
Ellerslie User Group - ReST Presentation
 
RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
 
SFDC REST API
SFDC REST APISFDC REST API
SFDC REST API
 
Graph ql vs rest
Graph ql vs restGraph ql vs rest
Graph ql vs rest
 
Developing on the aloashbei platform
Developing on the aloashbei platformDeveloping on the aloashbei platform
Developing on the aloashbei platform
 
RESTful API-centric Universe
RESTful API-centric UniverseRESTful API-centric Universe
RESTful API-centric Universe
 
JAX-RS. Developing RESTful APIs with Java
JAX-RS. Developing RESTful APIs with JavaJAX-RS. Developing RESTful APIs with Java
JAX-RS. Developing RESTful APIs with Java
 
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!
WordCamp Raleigh 2016 - WP API, What is it good for? Absolutely Everything!
 
Composing REST Services
Composing REST ServicesComposing REST Services
Composing REST Services
 
Php Interview Questions
Php Interview QuestionsPhp Interview Questions
Php Interview Questions
 
How to build a rest api
How to build a rest apiHow to build a rest api
How to build a rest api
 
Rapid RESTful Web Applications with Apache Sling and Jackrabbit
Rapid RESTful Web Applications with Apache Sling and JackrabbitRapid RESTful Web Applications with Apache Sling and Jackrabbit
Rapid RESTful Web Applications with Apache Sling and Jackrabbit
 
Oracle REST Data Services
Oracle REST Data ServicesOracle REST Data Services
Oracle REST Data Services
 
L18 REST API Design
L18 REST API DesignL18 REST API Design
L18 REST API Design
 
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...
Hanoi php day 2008 - 05. nguyen hai nhat huy - building-restful-web-service-w...
 

More from Kevingo Tsai

工研院尾牙工作流程表
工研院尾牙工作流程表工研院尾牙工作流程表
工研院尾牙工作流程表Kevingo Tsai
 
那些年,我們一起Open的data
那些年,我們一起Open的data那些年,我們一起Open的data
那些年,我們一起Open的dataKevingo Tsai
 
Playframework + Twitter Bootstrap
Playframework + Twitter BootstrapPlayframework + Twitter Bootstrap
Playframework + Twitter BootstrapKevingo Tsai
 
Design Restful Web Service, use SpringMVC as Example
Design Restful Web Service, use SpringMVC as ExampleDesign Restful Web Service, use SpringMVC as Example
Design Restful Web Service, use SpringMVC as ExampleKevingo Tsai
 
多媒體資料庫(New)3rd
多媒體資料庫(New)3rd多媒體資料庫(New)3rd
多媒體資料庫(New)3rdKevingo Tsai
 

More from Kevingo Tsai (6)

工研院尾牙工作流程表
工研院尾牙工作流程表工研院尾牙工作流程表
工研院尾牙工作流程表
 
那些年,我們一起Open的data
那些年,我們一起Open的data那些年,我們一起Open的data
那些年,我們一起Open的data
 
Playframework + Twitter Bootstrap
Playframework + Twitter BootstrapPlayframework + Twitter Bootstrap
Playframework + Twitter Bootstrap
 
Design Restful Web Service, use SpringMVC as Example
Design Restful Web Service, use SpringMVC as ExampleDesign Restful Web Service, use SpringMVC as Example
Design Restful Web Service, use SpringMVC as Example
 
Scrum
ScrumScrum
Scrum
 
多媒體資料庫(New)3rd
多媒體資料庫(New)3rd多媒體資料庫(New)3rd
多媒體資料庫(New)3rd
 

Design REST-ful Web Service