RESTful知识要点小结

REST是新一代的web service设计标准,关于REST的定义,以及同传统SOAP相比较的优略,这里就不罗嗦了,以后可以直接google。
这里先总结一下目前学到的REST相关知识。
REST中存在两个很重要的概念:资源 和 状态转移,一定要以这两个概念为核心,再去了解其他的如缓存、安全等方面。好了,废话少说,直接看总结:

1. 定义资源

REST的首要步骤之一就是定义资源。将客户端对URL的访问定义成对不同资源的访问。


2. 定义统一接口

HTTP是一种应用协议,而不仅仅是传输协议。HTTP定义了诸如GET、PUT、DELETE、POST等方法对资源进行操作。有了他们,我们无需创造createOrder, getStatus, updateStatus等应用程序特定的操作了。

所以,能否从HTTP基础设施中获得多少利益,主要取决于您把它当做应用层协议用的有多好。

GET用于获取资源

PUT用于更新资源

POST用于创建资源

DELETE用于删除资源


3. 定义表述(Representation)

资源是一个抽象的实体,因此需要在响应时定义一种对资源的表述。表述的类型有很多种格式,常见的有xml、json、PDF、CSV等等


4. 使用链接(link)实现状态转移

链接(link)提供了一种方式,帮助你从一种资源转移到另外一种资源,这种方式正好解释了REST中Transfer的含义。譬如,当使用GET获取一个1000条资源的列表时,如果当前的表述无法包括所有的的资源,则可以在当前表述中加上-“前页”/“后页”等的内部链接,从而帮助客户端完成对剩余资源获取的转移。

如下定义的表述中返回一组书籍的列表,同时在结果中定义了对"prev"和"next"等状态的转移。

 

{
    "results": [{
        "price": "25"
        "name": "java in action",
        "title": "java in action",
        "category": "IT",
        "isbn": "109422476",
        "description": "xxxx"},
     {
        "price": "40"
        "name": "Ruby in action",
        "title": "Ruby in action",
        "category": "IT",
        "isbn": "109422479",
        "description": "xxxx"}
    ]
    "links": [
    {
        "uri": "xxxx",
        "rel": "prev"
    },
    {
        "uri": "xxxx",
        "rel": "next"
    }],
    "available-results": 200
}    

 

另外,关于流程的状态迁移,可以一步一步按照客户端发出的请求返回符合条件的链接。

比如流程是A->B->C->D,当请求A时,实际上并不知道接下来能否满足条件访问B,只有当服务器成功响应请求A后,在A的响应中加入对资源B的链接,此时,客户端才可以继续访问B的请求。

以此类推,达到了流程化中对多种资源状态转移的实现。


5. 安全

 可以采用2种方式:

 1)当客户端访问一个受保护资源时,可以设置Authenticate头,对<认证用户名>:<Secret>采用base64编码,发送给服务器端.此种方式可以详见HTTP协议。

 2)客户端先发送请求,包括用户名和加密过的密码,服务器响应后,返回特殊的key,客户端下次访问时候,携带上该key,例如

客户端采用POST发送请求:

 

{
     "email":"xxxxx",
    "password":"xxxx"
}

 

服务器端返回请求:

 

{
    "email":"xxxx"
    key:"xxxxxxxxxxxxx"
}

 

当客户端需要再次访问受限资源时,可以附带上该key,这样服务器端就知道请求的操作是否能访问受限资源了。

6. 缓存

   缓存可以帮助增加可靠性、减少服务器开销、降低成本等。REST的缓存主要是利用HTTP协议的缓存机制,如Header中的no-cache、Expire、Cache-Control等


posted on 2012-06-15 08:38 想飞就飞 阅读(1676) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

公告


导航

<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(13)

我参与的团队

随笔分类(69)

随笔档案(68)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜