REST真相

banq發表於2009-08-07
REST不是CRUD, 本站已經進行大量討論(見標籤REST架構),那麼REST到底是什麼?

最嚴重的誤解就是,將REST的POST, GET, PUT, DELETE和資料庫資源的增刪改查CRUD聯絡起來, POST, GET, PUT, DELETE = Create, Read, Update, Delete,這是相當多REST框架的錯誤導向。

從REST名詞中,我們就看到狀態的轉移,也就是說,以URI為標誌、以超文字或超媒體驅動(hypertext/Hypermedia)的狀態轉移是REST架構核心。真正REST API使用場景如下圖。

1.一個簡單的get就應該獲得REST框架的入口點entry point,類似Atom Publishing Protocol的Discovery。如圖中,返回的是一個Service列表,有的REST框架案例是在Service之前再做一個Action類,作為REST入口,其實沒必要這麼畫蛇添足,直接將Service暴露給REST客戶端,這才有SOA架勢。

2.REST客戶端會根據終端使用者事件請求,定位某個Service,如果使用者請求的是FooService,那麼找到其入口點是/well=known-url/foo

3.客戶端透過向/well=known-url/foo發出GET命令,獲得FooService的列表List,如圖中XML的fooitems,其中也包括下一步狀態切換可能的URI:REVERSE,如果熟悉GOF設計模式的狀態模式,就會非常自然理解這點。REST其實是把事件和狀態分離到客戶端和伺服器兩個部分。

4.如果終端使用者發生請求事件,觸發了狀態轉換,那麼就啟用fooitems中的REVERSE URI:/well=known-url/foo/1/reverse

5.注意了,這是區別於CRUD關鍵一步,這時客戶端將向選擇的下一個狀態REVERSE URI發出PUT命令,伺服器後端業務元件接受PUT命令後,將改變資源的狀態。資源狀態改變後返回一個操作結果。

6.客戶端再次發出GET命令,獲得當前伺服器資源的狀態。

CRUD vs. Hypermedia:

http://hinchcliffe.org/archive/2009/08/06/17119.aspx

Your Web Service Might Not Be RESTful If
你的Web服務也許不是RESTful

http://theamazingrando.com/blog/?p=107

RESTful架構深入分析

http://www.jdon.com/jivejdon/thread/36716.html

[該貼被banq於2009-08-07 11:32修改過]

[該貼被banq於2009-08-07 11:38修改過]

相關文章