REST真相
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:
最嚴重的誤解就是,將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修改過]
相關文章
- 【Rest】PUT Vs Post in RestREST
- REST is not enabled. use -rest to turn onREST
- REST APIsRESTAPI
- rest apiRESTAPI
- The REST ObjectionRESTObject
- 到底什麼樣的 REST 才是最佳 REST?REST
- SOA之(5)——REST的SOA(SOA with REST)概念REST
- OSGI模組化的真相
- REST : rest_framework.decorators.api_view 實現PATCHRESTFrameworkAPIView
- REST StreamingREST
- Rest-AssuredREST
- WCF Rest ServiceREST
- 淺談RESTREST
- 關於RESTREST
- SharePoint REST API - 確定REST端點URLRESTAPI
- 透漏幾點面試的真相面試
- 阿里不去清華招人的真相阿里
- SQL on Hadoop 的真相(2)SQLHadoop
- SQL on Hadoop 的真相(1)SQLHadoop
- Elasticsearch(二)——Rest APIElasticsearchRESTAPI
- `rest-client`庫RESTclient
- 什麼是restREST
- Spark REST API & metricsSparkRESTAPI
- django rest framework(4)DjangoRESTFramework
- Rest--入門REST
- 對 REST 的理解REST
- 什麼是REST?REST
- It's not just a place to restREST
- 示例:建立REST SOEREST
- REST framework:介面文件RESTFramework
- REST framework:分頁RESTFramework
- http REST 簡介HTTPREST
- 【AI科幻】地球隕落·真相(中)AI
- Flappy Bird下架的真相APP
- 關於gdb斷點的真相斷點
- 探討Spring框架使用真相Spring框架
- 【譯】GraphQL vs. RESTREST
- Django REST framework 分頁DjangoRESTFramework