REST总结之二

    由于有个合作项目,用到了REST,我们这边的服务器是java的,合作方那边主要是PHP环境,为了远程调用的问题,使用了REST作为API的实现方案。现在项目做得差不多了,下面记下自己的一点心得,算是笔记吧。

    REST(Representational State Transfer)的说法来自
“Architectural Styles and the Design of Network-based Software Architectures”(Roy Fielding,University of California - Irvine,2000),是Fielding大牛的一篇博士论文,从网上搜索下应该可以找到中文版。首先REST根本不是个技术,只是一个架构方式的总称,跟web service也没太大关系,只是凑巧它可以满足最简单的远程信息获取的需要。REST也完全不是新东西,其实早期的HTML静态网页都是REST,只不过随着各种动态脚本语言的使用,互联网的架构也偏离了早期的设定,REST倒是有点拨乱反正的味道。

    REST的主要特征包括:
1,所有的东西都是资源,资源用URI表示,每一个会话都是无状态的。
这句话啥意思,记得以前的静态网页不,http://localhost/hello.jsp这实际就是一个资源,这个URI就是他的地址。你肯定说这么简单还用学REST?,对,REST就是这么简单,但是情况再复杂一点,比如要写个购买商品的页面,咱们用JSF或者struts,从后台Session取个客户ID,再从购物车里头把商品列表取出来,我们高兴的写了一个http://localhost/buyProduct.do完成了这个功能,那么这个http://localhost/buyProduct.do的URI就不是REST了,他依赖于运行时环境和Session里的变量,这样的URI不能被重复执行,也就是说直接粘到浏览器运行肯定要报错的。是不是REST也很容易看,这玩意通过URI能访问不,能访问就是REST。

2,公开目录结构式的 URI
看了上面那个例子,那么怎么写这个URI呢,其实REST希望的URI是采用目录结构式的URI,用一种带层次的结构表示对资源的获取,比如我要获取论坛的一个topic,URI的定义就可以表示成http://localhost/discussion/topics/103,在这里topics就是上文我们说到的资源,后面的103是资源的ID。这样的URI简洁美观,搜索引擎友好,可以被浏览器缓存,与会话状态无关,然后你可能要问了,那我以前写的http://localhost/discussion/topics?id=103这样的URI呢?其实这种也可以算REST,URI的表示方式是由开发者决定的,当然http://localhost/discussion/topics?id=103这种写法似乎对搜索引擎不那么友好。

3.用显式的HTTP METHOD表示对资源的操作
以前我们都习惯于用动词来命名操作,比如buyProduct.do,而REST提出了用HTTP的四种方法POST, GET, PUT, DELETE分别表示对资源的CRUD操作,这样URI就成了资源的名词形式,方法成为了对资源的操作类别,比如删除一个帖子需要写成HTTP DELETE http://localhost/discussion/topics/103,更新一个帖子可以写成HTTP UPDATE http://localhost/discussion/topics/103/author/test/content/xxxx...。PUT和DELETE在很多服务器是不被支持的,一般需要用POST和GET来模拟。

    REST的返回格式可以是HTTP协议的任何内容,比如HTML,TEXT,大部分人包括我用REST都是为了远程获取服务器资源,所以返回的可以是内容集中的格式,比如XML和JSON。Web Service中的WSDL文件包含了服务的标识符,参数类别,返回值类别,检索和异常处理。这些都是REST不具备的,

你可能感兴趣的:(REST)