RESTful中的PUT和PATCH實踐


 

先放上后台的在線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的使用場景,便可以在這三個接口中體現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM