-
- RESTful是什么?
- RESTful对应的中文是 REST式的。
- RESTful Web Service是一种常见的REST的应用,是遵守了REST风格的web服务。
- REST式的web服务是一种ROA(面向资源的架构)
REST 架构的主要原则
- 网络上的所有事物都可被抽象为资源(Resource)
- 每个资源都有一个唯一的资源标识符(Resource Identifier)
- 同一资源具有多种表现形式(xml、json等)
- 对资源的各种操作不会改变资源标识符
- 所有的操作都是无状态的(Stateless)
- 符合REST原则的架构方式即可称为RESTful
- URI和URL
- RESTful风格的一大特色就是使用URI来标识资源。
- URI 和 URL
http://example.com/users/
- 无状态性
- 无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前 Request,而不必了解前面 Request 的历史。
- 从而可以更容易地释放资源。
- 让服务器充分利用 Pool 技术来提高稳定性和性能。
- 资源操作
- http://ip /users/
传统处理 rest风格处理 处理内容
select方法 标明请求是GET方式 获取资源 (查询)
- save方法 标明请求是POST方式 创建一个新的资源 (添加)
- update方法 标明请求是PUT 方式 修改一个资源的状态 (修改)
DELETE 方法 标明请求是DELETE 删除一个资源 (删除)
- update方法 标明请求是PUT 方式 修改一个资源的状态 (修改)
- 资源展现
- XML
- JSON
以前的API开发:
http://127.0.0.1/user/list GET -- 查询用户列表
http://127.0.0.1/user/save POST -- 新增用户
http://127.0.0.1/user/update POST -- 更新用户数据
http://127.0.0.1/user/delete POST -- 删除数据
RESTful Web Service Api开发:
http://127.0.0.1/user GET -- 查询用户列表
http://127.0.0.1/user POST -- 新增用户
http://127.0.0.1/user PUT -- 更新用户数据
http://127.0.0.1/user DELETE -- 删除数据
-
- 最佳实践:REST接口设计
- URL的组成
- 网络协议(http、https)
- 服务器地址
- 接口名称
- ?参数列表
- URL定义限定
- 不要使用大写字母 --- 在restful中addUser.jsp或者add_user.jsp是不好的方式
- 使用中线 - 代替下划线 _ add-user.jsp是比较好的方式
- 参数列表应该被encode过
-
- 最佳实践:响应设计
- Content body 仅仅用来传输数据。
- 数据要做到拿来就可用的原则,不需要“拆箱”的过程。
- 用来描述数据或者请求的元数据放Header中,例如 X-Result-Fields。
页面的处理
<form action="/rest/test" method="post">
<input type="hidden" name="_method" value="put"/>
编号:<input type="text" name="id"><br>
姓名:<input type="text" name="name"><br>
<input type="submit" value="put修改" ><br>
</form>
<form action="/rest/test" method="post">
<input type="hidden" name="_method" value="delete"/>
编号:<input type="text" name="id"><br>
姓名:<input type="text" name="name"><br>
<input type="submit" value="delete删除" ><br>
</form>
ajax的处理
if (r){
var params = {"ids":ids,"_method":"delete"};
//$.post("/rest/item/delete",params, function(data){
$.post("/rest/item",params, function(data){
if(data.status == 200){
$.messager.alert('提示','删除商品成功!',undefined,function(){
$("#itemList").datagrid("reload");
});
}else{
$.messager.alert('提示','删除商品失败!',undefined,function(){
$("#itemList").datagrid("reload");
});
}
});
}
web.xml中的配置
<!-- restful风格,put处理 -->
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- restful风格,delete处理 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>