先放上后台的在線API文檔:SkyBlog Swagger API
在UserApi中,有這樣三個接口
1. PUT /users/{id} 更新用戶信息
2. PATCH /users/role/{id} 更新用戶角色
3. PATCH /users/status/{id} 更新用戶狀態
在這三個接口便可以看出PUT和PATCH的區別
PUT方法主要是用來更新整個資源的,而PATCH方法主要是用來執行某項操作並更新資源的某些字段
而在項目中,這三個接口需要的用戶權限也不一樣
PUT /users/{id} 更新用戶信息
要求是系統管理員、管理員或者是用戶本人,才能使用該接口
/** * 更新用戶信息 * @param id 用戶ID * @param user 用戶對象 * @return 更新后的用戶 */ @PutMapping("/{id}") @ApiOperation("更新用戶信息") @PreAuthorize("hasAnyRole('SYS_ADMIN','ADMIN') or #id == authentication.principal.id") @SysLog(resource = RESOURCE_USER,type = SysLogTypeEnum.UPDATE) public Result<UserDTO> updateUser(@ApiParam("用戶ID") @PathVariable("id") @P("id") Integer id, @ApiParam("用戶對象") @Valid @RequestBody UserDO user)
PATCH /users/role/{id} 更新用戶角色
要求是系統管理員才能使用該接口
/** * 更新用戶信息 * @param id 用戶ID * @param user 用戶對象 * @return 更新后的用戶 */ @PutMapping("/{id}") @ApiOperation("更新用戶信息") @PreAuthorize("hasAnyRole('SYS_ADMIN','ADMIN') or #id == authentication.principal.id") @SysLog(resource = RESOURCE_USER,type = SysLogTypeEnum.UPDATE) public Result<UserDTO> updateUser(@ApiParam("用戶ID") @PathVariable("id") @P("id") Integer id, @ApiParam("用戶對象") @Valid @RequestBody UserDO user)
PATCH /users/role/{id} 更新用戶角色
要求是系統管理員才能使用該接口
/** * 更新用戶角色 * @param id 用戶ID * @param update 更新角色對象 * @return 結果對象 */ @PatchMapping("/role/{id}") @ApiOperation("更新用戶角色") @PreAuthorize("hasRole('SYS_ADMIN')") @SysLog(resource = "用戶權限",type = SysLogTypeEnum.UPDATE) public Result updateUserRole(@ApiParam("用戶ID") @PathVariable("id")Integer id, @ApiParam("角色ID") @Valid @RequestBody UpdateRole update)
PATCH /users/status/{id} 更新用戶狀態
要求是系統管理員、管理員才能使用該接口
/** * 更新用戶狀態 * @param id 用戶ID * @param update 更新狀態對象 * @return 結果對象 */ @ApiOperation("更新用戶狀態") @PatchMapping("/status/{id}") @PreAuthorize("hasAnyRole('SYS_ADMIN','ADMIN')") @SysLog(resource = "用戶狀態",type = SysLogTypeEnum.UPDATE) public Result updateUserStatus(@ApiParam("角色ID") @PathVariable("id") Integer id, @ApiParam("狀態ID") @Valid @RequestBody UpdateStatus update)
所以PUT和PATCH的使用場景,便可以在這三個接口中體現