RestFull风格
RestFull风格
概念
restful是一种软件架构设计风格,而不是标准,只是提供了一组设计原则和约束条件,基于restful风格设计的软件更简洁,更有层次,更易于实现缓存
对比
传统URL请求方式
http://127.0.0.1:8080/stu/getStudent?userId=mozun #查询、get请求
http://127.0.0.1:8080/stu/addStudent #新增、post请求
http://127.0.0.1:8080/stu/delStudent?userId=mozun #删除、get或者post请求
http://127.0.0.1:8080/stu/updateStudent #修改、post请求
#们会显示的通过方法路由和来区分用户对应做的什么操作。这个时候不利于方法路由重复,而且显示的定义了具体的操作
restful风格
http://127.0.0.1:8080/stu/student/mozun #查询、get请求
http://127.0.0.1:8080/stu/student/ #新增、post请求
http://127.0.0.1:8080/stu/student/ #删除、put请求
http://127.0.0.1:8080/stu/student/mozun #修改、delete请求
#资源路由复用,具有一定安全性吧(待验证)
常用HTTP状态码
| 状态码 | 描述 |
|---|---|
| 200 – OK | 一切正常 |
| 201 – OK | 新的资源已经成功创建 |
| 204 – OK | 资源已经成功擅长 |
| 304 – Not Modified | 客户端使用缓存数据 |
| 400 – Bad Request | 请求无效,需要附加细节解释如 "JSON无效" |
| 401 – Unauthorized | 请求需要用户验证 |
| 403 – Forbidden | 服务器已经理解了请求,但是拒绝服务或这种请求的访问是不允许的。 |
| 404 – Not found | 没有发现该资源 |
| 422 – Unprocessable Entity | 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失。 |
| 500 – Internal Server Error | 服务器后端异常 |
本文参考链接
https://blog.csdn.net/qq_27026603/article/details/82012277
restful代码实测
后端SpringMVC
package com.lwp.study.controller;
import com.lwp.study.blog.pojo.User;
import com.lwp.study.blog.service.UserService;
import com.lwp.study.dao.StudentMapper;
import com.lwp.study.pojo.Student;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@RestController
@RequestMapping("testRestFul")
@Api(value="测试学生接口",tags = "学生相关接口")
public class StudentRestFulController {
@Autowired
private UserService userService;
@GetMapping("/user/{userid}")
@ApiOperation("查询所有指定信息")
public List<User> getUserById(@PathVariable(value="userid") String userId){
//测试请求 -->http://127.0.0.1:18080/testRestFul/user/lwp
return userService.listByIds(Arrays.asList(userId));
}
@PostMapping("/user")
//方法参数说明,name参数名;value参数说明,备注;dataType参数类型;required 是否必传
@ApiImplicitParam(name="user",value="用户对象")
//方法注释
@ApiOperation("添加用户")
public List<User> addUser(User user){
userService.save(user);
return userService.list();
}
@PutMapping("/user")
@ApiImplicitParam(name="user",value="用户对象")
@ApiOperation("修改用户信息")
public List<User> updateUser(User user){
userService.updateById(user);
return userService.list();
}
@ApiImplicitParam(name="userId",value="学生主键标识",dataType = "String",required = true)
@ApiOperation("删除学生信息")
@DeleteMapping("/user/{userId}")
public List<User> delUser(@PathVariable String userId){
userService.removeById(userId);
return userService.list();
}
}
客户端Swagger2
put请求
Curl
curl -X PUT "http://127.0.0.1:18080/testRestFul/user?age=21&userid=lwp&username=%E5%98%BB%E5%98%BB" -H "accept: */*"
Request URL
http://127.0.0.1:18080/testRestFul/user?age=21&userid=lwp&username=%E5%98%BB%E5%98%BB
post请求
Curl
curl -X POST "http://127.0.0.1:18080/testRestFul/user?address=%E6%B9%96%E5%8D%97%E9%83%B4%E5%B7%9E&age=22&telphone=11012010086&userid=xixi&username=%E6%BA%AA%E9%A3%8E" -H "accept: */*"
Request URL
http://127.0.0.1:18080/testRestFul/user?address=%E6%B9%96%E5%8D%97%E9%83%B4%E5%B7%9E&age=22&telphone=11012010086&userid=xixi&username=%E6%BA%AA%E9%A3%8E
get请求
Curl
curl -X GET "http://127.0.0.1:18080/testRestFul/user/xixi" -H "accept: */*"
Request URL
http://127.0.0.1:18080/testRestFul/user/xixi
delete请求
Curl
curl -X DELETE "http://127.0.0.1:18080/testRestFul/user/test" -H "accept: */*"
Request URL
http://127.0.0.1:18080/testRestFul/user/test
注意点
#单个参数或少部分参数时,我们可以通过PathVariable("id")来指定路由上的映射关系,如果路由参数和方法参数一致不需要指定名称
#当时一定要使用@PathVariable注解,以下有对比
#不使用@PathVariable注解请求路径:http://127.0.0.1:18080/testRestFul/user/{userId}?userId=lwp
#使用@PathVariable注解请求路径:http://127.0.0.1:18080/testRestFul/user/lwp
@GetMapping("/user/{id}/{name}")
@ApiOperation("查询所有指定信息")
public List<User> getUserById(@PathVariable("id") String userId,String name){
}

浙公网安备 33010602011771号