1. Restful 的介绍
简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构,是一种面向资源的架构
RESTful 架构的核心规范与约束:统一接口
统一资源接口要求使用标准的HTTP方法对资源进行操作,所以URI只应该来表示资源的名称,而不应该包括资源的操作。
通俗来说,URI不应该使用动作来描述。例如,下面是一些不符合统一接口要求的URI:
- GET /getUser/1
- POST /createUser
我目前觉得 Restful 是用来设计标准的、通用的、统一的接口的。
详细介绍参考菜鸟教程 RESTful 架构详解 ,或者 RESTful 个人理解总结
2.接口示例:
传统URL请求格式:
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
Restful请求格式:
http://127.0.0.1/user/1 GET 根据用户id查询用户数据http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
http://127.0.0.1/user DELETE 删除用户信息
3. SpringBoot 项目中使用 RESTful
① User 实体类
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class User extends Model<User> {
private long id;
private String name;
private Integer age;
}
② 操作 User 对象的 Controller
@RestController
@RequestMapping(value="/users") // 通过这里配置使下面的映射都在/users下
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value="/", method=RequestMethod.GET)
public List<User> getUserList() {
// 处理"/users/"的GET请求,用来获取用户列表
// 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
return userService.selectList(null);
}
@RequestMapping(value="/", method=RequestMethod.POST)
public String postUser(@ModelAttribute User user) {
// 处理"/users/"的POST请求,用来创建User
// 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数
return "addSuccess";
}
@RequestMapping(value="/{id}", method= RequestMethod.GET)
public User getUser(@PathVariable Long id) {
// 处理"/users/{id}"的GET请求,用来获取url中id值的User信息
// url中的id可通过@PathVariable绑定到函数的参数中
return userService.selectById(id);
}
@RequestMapping(value="/{id}", method=RequestMethod.PUT)
public String putUser(@PathVariable Long id, @ModelAttribute User user) {
// 处理"/users/{id}"的PUT请求,用来更新User信息
User user1 = new User();
user1.setId(id);
user1.setName("小黑");
userService.updateById(user1);
return "updateSuccess";
}
@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
public String deleteUser(@PathVariable Long id) {
// 处理"/users/{id}"的DELETE请求,用来删除User
userService.deleteById(id);
return "deleteSuccess";
}
}
只是模拟了一下,有些方法并没有写实现
然后用 postman 测试一下
③ 结果
添加
查所有
删除
我们仍然使用 @RequestMapping 注解,但不同的是,我们指定 method 属性来处理不同的 HTTP 方法,并且通过 @PathVariable 注解来将 HTTP 请求中的属性绑定到我们指定的形参上。
事实上,Spring 4.3 之后,为了更好的支持 RESTful 风格,增加了几个注解:@PutMapping、@GetMapping、@DeleteMapping、@PostMapping,从名字也能大概的看出,其实也就是将 method 属性的值与 @RequestMapping 进行了绑定而已
目前只能理解到这。。。