一、什么是Resutful
Restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,是对http协议的诠释。回顾:之前的URL地址
查询所有的用户:http://localhost:8080/springmvc/user/selectAllUser
按ID查询用户:http://localhost:8080/springmvc/user/selectByUserId?id=12
删除用户:http://localhost:8080/springmvc/user/deleteByUserld?id=12
修改用户:http://localhost:8080/springmvc/user/updateByUserId?id=12&username=‘G’
增加用户:http://localhost:8080/springmvc/user/addUser?id=12&username=‘G’
二、资源设计规则
资源定位︰互联网所有的事物都是资源,要求url中没有动词,只有名词,没有参数。而且所有的名词往往与数据库的表名对应,一般来说,数据库中的表都是同种记录的集合,所以URI中的名词也应该使用复数
url请求的风格就像这样:
http://localhost:8080/springmvc003/usershttp://localhost:8080/springmvc003/depts
三、动作设计规则
资源操作:使用put、delete、post、get等不同方法对资源进行操作,分别对应添加、删除、修改、查询。一般使用时还是post和get , put和delete几乎不使用。
GET(SELECT):从服务器去取出资源(一项或者多项)
POST(CREATE):在服务器新建一个资源
PUT(UPATE):在服务器更新资源(客户端提供改变的完整资源)。PUT更新整个对象
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。PATCH更新个别属性
HEAD:获得一个资源的元数据
OPTIONS:获得客户端针对一个资源能实现的操作
四、返回结果规则
1)确定HTTP的返回状态
HTTP的返回状态一般有以下几种
200:成功
400∶错误
404:没有找到资源
403∶禁止
406∶不能使用请求内容特性来响应请求资源,比如请求的是HTML文件,但是消费者的HTTP头包含了JSON要求。
500∶服务器内部错误2)定义统一返回的格式
为了保障前后端的数据交互的顺畅,建议规范数据的返回,并采用固定的数据格式封装,如异常信息︰
{
"code":10001,
"msg":"异常信息",
"data":null
}
成功信息︰
{
"code":200,
"msg" : "success",
"data":{
"id":1,
"name" : "Giles",
"age":2
}
}
五、@PathVariable注解
$("#testResultful").click(function () {
$.ajax({
url: "depts/1",
type: "GET",
success: function (data) {
},
dataType: "JSON"
});
});
@GetMapping(value = "/depts/{id}")
public ResultDto selectDeptById(@PathVariable("id") Integer id) {
logger.info("按ID查询部门");
logger.info("获取id为:" + id);
return null;
}
执行结果:
添加操作
前台:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录功能</title>
<script src="static/script/jquery-1.8.3.js"></script>
<script>
$("#testResultful").click(function () {
$.ajax({
url: "depts",
type: "POST",
success: function (data) {
if (data.code==200){
$("#msgdiv").html(data.msg);
}
},
contentType: "application/json;charset=utf-8",
dataType: "JSON"
});
});
})
</script>
</head>
<body>
<h2>用户登录</h2>
手机号:<input type="text" id="telephone"><br>
密码:<input type="text" id="password"><br>
<input type="button" value="登录" id="submit">
<input type="button" value="测试Resultful" id="testResultful"><br>
<div id="msgdiv">
</div>
</body>
</html>
后台
@PostMapping(value = "/depts")
public ResultDto addDept(Dept dept) {
logger.info("===增加部门信息==");
ResultDto resultDto = new ResultDto();
resultDto.setCode(200);//一般不会讲状态码显示在这里,在实际开发中会建立一个常量类
resultDto.setMsg("增加部门成功");
Dept resultDept = new Dept();
resultDept.setId(1);
resultDept.setDname("技术部");
resultDto.setData(resultDept);
return resultDto;
}
执行结果: