zoukankan      html  css  js  c++  java
  • 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的使用场景,便可以在这三个接口中体现

  • 相关阅读:
    Java 中Timer和TimerTask 定时器和定时任务使用的例子详解
    CentOS7下安装Scrapy步骤详解
    使用C++实现求最大公约数和最小公倍数算法详解
    windows ruby on rails搭建搭建
    php爬虫选择器-来自phpspider
    markdown增强显示插件
    PHP7以上的异常处理变化
    open-php开源项目:php-code-generator PHP流行框架的curd的代码生成器
    laravel withoutOverlapping导致执行脚本延迟或者失效问题
    vcpkg国内镜像设置
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11653932.html
Copyright © 2011-2022 走看看