REST真相

来源:互联网 发布:java object类 编辑:程序博客网 时间:2024/04/29 02:30

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




0 0
原创粉丝点击