RESTful Web Services学习笔记,在此记录以备以后参考
[b]在应用里每个有价值的事物都应该被暴露为一个资源。[/b]
[size=medium]一般ROA设计步骤:[/size]
1.规划数据集
2.把数据集划分为资源
对于其中每种资源:
3.用URI为该资源命名
4.暴露一个统一接口的子集
5.设计来自客户端的表示
6.设计发给客户端的表示
7.用超链接和表单把该资源与已有资源联系起来
8.考虑有哪些典型的事件经过
9.考虑可能出现哪些错误情况
[size=medium]可寻址性[/size]
如果一个WEB服务将其数据集里有价值部分作为资源发布出来,那么该应用就是可寻址的。一个URI应当只表示一个资源。一个资源的不同表示可以使用不同的URI,例如:/release/104.html和/release/104_en.html
[size=medium]状态与无状态性[/size]
rest服务里状态分为两种:资源状态(即关于资源的信息)和应用状态(即关于客户端在应用中所处状态的信息)。资源状态保存在服务端,而且只能以表示的形式发给客户端。应用状态保存在客户端;当它能够创建、修改或删除一个资源时,它将作为POST、PUT或DELETE请求的一部分发送给服务器,成为资源状态。例如使用搜索引擎时提交一个关键字得到查询结果,然后我们又进行翻页,这里关键字和页码都是属于应用状态。
[size=medium]统一接口[/size]
GET:获取一个资源的表示
PUT:创建一个新资源,修改已有资源。
DELETE:删除已有资源
POST:创建从属于某个父资源的资源,也可以用它来为资源的当前状态添加数据。(这里的添加数据和PUT的用法修改已有资源有区别,例如:通过POST向服务器提交新的log)
HEAD:获取的一个子包含元数据的方法
OPTIONS:查看一个资源支持哪些http方法。OPTIONS请求的响应里含有HTTP Allow报头(header)。Allow报头的例子:Allow:GET,HEAD 这个报头表明:该资源支持GET和HEAD请求。
PUT和POST动作
[table]
||向新资源发put请求|向已有资源发put请求|POST|
|weblogs|N/A(资源已存在)|无效果|创建一个新博客|
|weblogs/myweblog|创建该博客|修改该博客的设置|往博客里添加一篇文章|
|weblogs/myweblog/entries/1|N/A(你无法知道这个URI)|编辑该博客文章|为该博客文章添加评论|
[/table]
[color=red]PUT与POST的区别就在于:假如是客户端负责决定新资源采用什么URI,那就用PUT;假如是服务器负责新资源采用什么URI,那就用POST。PUT的实现要求具有等幂性而POST的实现可以没有等幂性[/color]
[size=medium]URI设计[/size]
URI设计有三条基本原则:
1.用路径变量(path variables)来表达层次结构:weblogs/myweblog/entries/1。
2.用逗号或分号表达非层次结构:/parent/child1;child2 /earth/43.2,45.6。当作用域信息的次序有关紧要时,就用逗号,否则就用分号。
3.用查询变量(query variables)来表达算法的输入,例如:/search?q=jellyfish&start=20。
[b]在应用里每个有价值的事物都应该被暴露为一个资源。[/b]
[size=medium]一般ROA设计步骤:[/size]
1.规划数据集
2.把数据集划分为资源
对于其中每种资源:
3.用URI为该资源命名
4.暴露一个统一接口的子集
5.设计来自客户端的表示
6.设计发给客户端的表示
7.用超链接和表单把该资源与已有资源联系起来
8.考虑有哪些典型的事件经过
9.考虑可能出现哪些错误情况
[size=medium]可寻址性[/size]
如果一个WEB服务将其数据集里有价值部分作为资源发布出来,那么该应用就是可寻址的。一个URI应当只表示一个资源。一个资源的不同表示可以使用不同的URI,例如:/release/104.html和/release/104_en.html
[size=medium]状态与无状态性[/size]
rest服务里状态分为两种:资源状态(即关于资源的信息)和应用状态(即关于客户端在应用中所处状态的信息)。资源状态保存在服务端,而且只能以表示的形式发给客户端。应用状态保存在客户端;当它能够创建、修改或删除一个资源时,它将作为POST、PUT或DELETE请求的一部分发送给服务器,成为资源状态。例如使用搜索引擎时提交一个关键字得到查询结果,然后我们又进行翻页,这里关键字和页码都是属于应用状态。
[size=medium]统一接口[/size]
GET:获取一个资源的表示
PUT:创建一个新资源,修改已有资源。
DELETE:删除已有资源
POST:创建从属于某个父资源的资源,也可以用它来为资源的当前状态添加数据。(这里的添加数据和PUT的用法修改已有资源有区别,例如:通过POST向服务器提交新的log)
HEAD:获取的一个子包含元数据的方法
OPTIONS:查看一个资源支持哪些http方法。OPTIONS请求的响应里含有HTTP Allow报头(header)。Allow报头的例子:Allow:GET,HEAD 这个报头表明:该资源支持GET和HEAD请求。
PUT和POST动作
[table]
||向新资源发put请求|向已有资源发put请求|POST|
|weblogs|N/A(资源已存在)|无效果|创建一个新博客|
|weblogs/myweblog|创建该博客|修改该博客的设置|往博客里添加一篇文章|
|weblogs/myweblog/entries/1|N/A(你无法知道这个URI)|编辑该博客文章|为该博客文章添加评论|
[/table]
[color=red]PUT与POST的区别就在于:假如是客户端负责决定新资源采用什么URI,那就用PUT;假如是服务器负责新资源采用什么URI,那就用POST。PUT的实现要求具有等幂性而POST的实现可以没有等幂性[/color]
[size=medium]URI设计[/size]
URI设计有三条基本原则:
1.用路径变量(path variables)来表达层次结构:weblogs/myweblog/entries/1。
2.用逗号或分号表达非层次结构:/parent/child1;child2 /earth/43.2,45.6。当作用域信息的次序有关紧要时,就用逗号,否则就用分号。
3.用查询变量(query variables)来表达算法的输入,例如:/search?q=jellyfish&start=20。