RESTful
RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映射到某协议时也需要遵循其标准,但不包含对通信协议的更改。
特征
1、通过url地址来标识资源,系统中的每个对象或资源都可以通过其url地址来获取
2、统一接口,显式地使用HTTP方法,来进行crud映射
- 创建资源使用POST
- 删除资源使用DELETE
- 更新资源使用PUT
- 检索资源使用GET
3、资源多重反映,通过url地址访问的每个资源都可以根据客户端的规定进行返回,例:JSON、XML
RESTful服务适用web应用中创建服务的API,将资源以JSON或XML等数据格式进行暴露,从而可以更方便的让客户端进行调用。
基于SpringMVC的RESTful服务
在SpringMVC中对RESTful支持,主要通过注解来实现
@Controller:声明一个处理请求的控制器
@RequestMapping:请求映射地址到对应的方法,该注解又可以分为一下几种类型:
@GetMapping
@PostMpping
@PutMapping
@DeleteMapping
@PatchMapping
@ResponsrBody:响应内容转换为JSON格式
@RequestBody:请求内容转换为JSON格式
@RestContrller:等同@Controller+@ResponsrBody
整体API设计(基于用户管理模块)
localhost:8080/user:获取所有用户
localhost:8080/user/{id}:根据ID获取该用户信息
localhost:8080/insert:保存用户信息
localhost:8080/update:更新用户信息
localhost:8080/delete/{id}:根据用户ID删除用户
localhost:8080/user/from:获取创建用户表单
localhost:808/update/{id}:根据ID获取用户信息
@RestController
@RequestMapping("/user")
public class UserController extends Thread {
private static final String Void = null;
@Autowired
private UserService userService;
/**
* 获取用户列表
*
* @param model
* @return
*/
@GetMapping
public ModelAndView list(Model model) {
model.addAttribute("list", userService.findAll());
model.addAttribute("title", "用户管理");
return new ModelAndView("user/list", "userModel", model);
}
/**
* 根据Id获取用户信息
*
* @param id
* @param model
* @return
*/
@GetMapping("{id}")
public ModelAndView view(@PathVariable("id") int id, Model model) {
User user = userService.findById(id);
model.addAttribute("user", user);
model.addAttribute("title", "查看用户");
return new ModelAndView("user/view", "userModel", model);
}
/**
* 创建用户表单
*
* @param model
* @return
*/
@GetMapping("/form")
public ModelAndView form(Model model) {
model.addAttribute("user", new User());
model.addAttribute("title", "创建用户");
return new ModelAndView("user/form", "userModel", model);
}
/**
* 保存用户
*
* @param user
* @param model
* @return
*/
@PostMapping("insert")
public ModelAndView insert(User user, Model model) {
user.setName("name");
user.setPassword("000000");
boolean flag = userService.addUser(user);
if (flag == true) {
return new ModelAndView("redirect:/user");
} else {
return null;
}
}
/**
* 更新用户
*
* @param user
* @param model
* @return
*/
@PutMapping("update")
public ModelAndView update(User user, Model model) {
boolean flag = userService.update(user);
if (flag == true) {
return new ModelAndView("redirect:/user");
} else {
return null;
}
}
/**
* 根据Id删除用户
*
* @param id
* @param model
* @return
*/
@DeleteMapping(value = "delete/{id}")
public ModelAndView delete(@PathVariable("id") int id, Model model) {
boolean flag = userService.deleteById(id);
if (flag == true) {
return new ModelAndView("redirect:/user");
} else {
return null;
}
}
/**
* 根据Id获取用户信息
*
* @param id
* @param model
* @param user
* @return
*/
@GetMapping("/form")
public ModelAndView update(@PathVariable("id") int id, Model model, User user) {
user = userService.findById(id);
model.addAttribute("user", user);
model.addAttribute("title", "修改信息");
return new ModelAndView("user/update", "userModel", model);
}
}