先放上后台的在线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的使用场景,便可以在这三个接口中体现

RESTful中的PUT和PATCH实践的更多相关文章

  1. restful api的10个最佳实践

    Web API在过去的几年里非常盛行,因为它有着语法简单.规范化和轻量级的优点,因为得到广泛的推崇,很多过往的技术手段都慢慢转换为使用Web API来开发.而Web API通常使用的设计方式是REST ...

  2. 在objc项目中使用常量的最佳实践

    在objc项目中使用常量的最佳实践   之前,在在objc项目中使用常量中,使用c的预处理#define来设置常量.比如,可以做个头文件,然后在需要的类文件中import,使用常量. 但这不是最佳实践 ...

  3. Android中保存静态秘钥实践(转)

    本文我们将讲解一个Android产品研发中可能会碰到的一个问题:如何在App中保存静态秘钥以及保证其安全性.许多的移动app需要在app端保存一些静态字符串常量,其可能是静态秘钥.第三方appId等. ...

  4. RESTFul中的那些事(1)---在RESTFul中,HTTP Put和Patch操作的差别?

    笔者在用调用Google Calendar和Google Tasks的RESTFul API的时候.遇到了一个特殊的操作,PATCH. 那么PATCH操作和PUT操作的差别是什么呢? 依据PATCH ...

  5. RESTFul中的那些事(2)----怎样支持RESTFul的HTTP Patch方法?

    我们在调用RESTFul服务的时候,有的时候.第三方的服务会提供支持PATCH 操作的方法,在这样的情况下.我们假设我们以下的这样的方式, 去调用PATCH操作.肯定会返回40X的错误. PATCH ...

  6. 10个有关RESTful API良好设计的最佳实践

    Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...

  7. [转]10个有关RESTful API良好设计的最佳实践

    Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...

  8. 10个有关RESTful API良好设计的最佳实践(转)

    原文地址:http://www.jdon.com/soa/10-best-practices-for-better-restful-api.html Web API已经在最近几年变成重要的话题,一个干 ...

  9. iOS 学习 RESTful 中 Http 的幂等性

    一. RESTful  RESTful (Representational State Transfer) 是一种常用流行的软件架构,设计风格或协议标准.提供了一组设计风格和约束条件.主要用于客户端和 ...

随机推荐

  1. Jmeter性能常见问题集锦

    1. java.net.BindException: Address already in use: connect 开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本 分布式环境部署 ...

  2. P2764 最小路径覆盖问题 题解(二分图)

    建图思路很明确,拆点跑最大匹配,但这明显是个二分图的题题解居然只有一篇匈牙利算法. 发一种和之前那篇匈牙利思路略有不同的题解. 本题的难点就是如何输出,那么我们不妨在建图的时候加入一个原则,即:连边时 ...

  3. android分析之Thread类

    线程与线程类要区分开来. 抽象来说,线程是CPU调度的最小单位,但是线程总要执行代码,这个代码就在线程类里说明(即Thread类).无论如何,Thread只是一个类,但其功能就是"启动一个线 ...

  4. python 画图中文显示问题

    在python文件当前目录下添加simsun.ttc(资源网上下载即可,有很多) 代码如下: plt.title("标题", fontproperties='SimHei', si ...

  5. socket 之send和recv原理剖析

    认识TCP socket的发送缓冲区和接收缓冲区 当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,相当与内存中的一片空间 send原理剖析 send是不是直接把数据发送给服 ...

  6. 吃透 MQ

    本文主要讲解 MQ 的通用知识,让大家先弄明白:如果让你来设计一个 MQ,该如何下手?需要考虑哪些问题?又有哪些技术挑战? 有了这个基础后,我相信后面几篇文章再讲 Kafka 和 RocketMQ 这 ...

  7. 【ZeyFraのJavaEE开发小知识05】Mybatis-Plus & Axios

    关于如何在Mybatis-Plus中添加SQL拦截器 之前ZeyFra在MyBatis-Plus[踩坑记录01]一文中提到过,使用Mybatis-Plus时最好使用MybatisSqlSessionF ...

  8. The 2018 ACM-ICPC CCPC NING XIA G-Factories

    题意:在一棵数的叶子上建k个工厂保证,求两两距离之和的最小值. 思路:如果一个一个叶子节点去考虑去与否太麻烦了,直接考虑该节点的子树上选取几个作为工厂,利用树形DP,dp[u][i]表示的是u节点为根 ...

  9. 数数字(JAVA语言)

    package 第三章习题; /*  * 把前n(n<=10000)个整数顺次写在一起:  * 89101112...  * 数一数0-9各出现多少次  * (输出10个整数,分别是09出现的次 ...

  10. python3 虚拟环境 venv

    创建一个虚拟环境: python -m venv test            (test 为创建的虚拟环境目录) 激活虚拟环境: test\Scripts\activate            ...