RESTful API接口规范及使用
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
- 非Rest设计,以往我们都会这么写:以不同的URL进行不通的操作
@RestController
@RequestMapping("/user")
@Api(tags = "用户管理模块")
public class UserController{
@Resource
private UserService userService;
/** 添加用户 */
@RequestMapping("/addUser")
public String addUser(User user){
return userService.addUser(user);
}
/** 删除用户 */
@RequestMapping("/deleteUser")
public String deleteUser(String userId){
return userService.deleteUser(user);
}
/** 修改用户 */
@RequestMapping("/updateUser")
public String updateUser(User user){
return userService.updateUser(userId);
}
/** 查询用户 */
@RequestMapping("/queryUser")
public User queryUser(String userId){
return userService.queryUser(userId);
}
}
http://localhost:8080/user/addUser(添加用户)
http://localhost:8080/user/deleteUser (删除用户)
http://localhost:8080/user/updateUser (更新用户)
http://localhost:8080/user/queryUser (查询用户)
- Rest架构:
- 在我们定义一个接口的URL时,可以通过以下两种方式实现
- 第一种方式:指定请求方式
-
@RequestMapping(value ="/user", method = RequestMethod.GET)
查询 -
@RequestMapping(value ="/user", method = RequestMethod.POST)
添加或修改 -
@RequestMapping(value ="/user", method = RequestMethod.PUT)
修改 -
@RequestMapping(value ="/user", method = RequestMethod.DELETE)
删除
- 第二种方式:使用特定的请求方式注解
-
@PostMapping("/user")
添加或修改 -
@DeleteMapping("/user/{userId}")
删除 -
@PutMapping("/user")
修改 -
@GetMapping("/user/{userId}")
查询
@RestController
@RequestMapping("/admin")
@Api(tags = "用户管理模块")
public class UserController{
@Resource
private UserService userService;
/**添加用户*/
@PostMapping("/user")
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String addUser(User user){
return userService.addUser(user);
}
/**删除用户*/
@DeleteMapping("/user/{userId}")
@RequestMapping(value ="/user", method = RequestMethod.DELETE)
public String deleteUser(@PathVariable("/userId")String userId){
return userService.deleteUser(userId);
}
/**修改用户*/
@PutMapping("/user")
@RequestMapping(value ="/user", method = RequestMethod.PUT)
// @PostMapping("/user") // 也可以用 PostMapping
// @RequestMapping(value = "/user", method = RequestMethod.POST)
public String updateUser(User user){
return userService.updateUser(user);
}
/**查询用户*/
@GetMapping("/user/{userId}")
@RequestMapping(value ="/user", method = RequestMethod.GET)
public User queryUser(@PathVariable("/userId")String userId){
return userService.queryUser(userId);
}
}
http://locahost:8080/admin/user/1 (查询用户ID为1的数据信息)
http://localhost:8080/admin/user/1 (删除用户ID为1的数据信息)
- RESTfui API接口响应的资源(返回给前端的数据格式)的表现形式为
JSON
或XML
- 方式一:在控制类(controller类)上添加
@ResponseBody
注解 - 方式二:在每个接口的方法上添加
@ResponseBody
注解 - 方式三:直接在控制类(controller类)使用
@RestController注解
- 前端通过无状态的http协议与后端进行接口交互
- 无状态:每一次请求都是独立的,每一次请求都不会有请求记录
- 状态码
200:服务器成功返回用户请求的数据,该操作是幂等的。
201:用户新建或修改数据成功。
202:表示一个请求已经进入后台排队(异步任务)
204:用户删除数据成功。
301:永久重定向
302:暂时重定向
400:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401:表示用户没有权限(令牌、用户名、密码错误)。
403:表示用户得到授权(与401错误相对),但是访问是被禁止的。
404:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410:用户请求的资源被永久删除,且不会再得到的。
422:当创建一个对象时,发生一个验证错误。
500:服务器发生错误,用户将无法判断发出的请求是否成功。