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的使用场景,便可以在这三个接口中体现
RESTful中的PUT和PATCH实践的更多相关文章
- restful api的10个最佳实践
Web API在过去的几年里非常盛行,因为它有着语法简单.规范化和轻量级的优点,因为得到广泛的推崇,很多过往的技术手段都慢慢转换为使用Web API来开发.而Web API通常使用的设计方式是REST ...
- 在objc项目中使用常量的最佳实践
在objc项目中使用常量的最佳实践 之前,在在objc项目中使用常量中,使用c的预处理#define来设置常量.比如,可以做个头文件,然后在需要的类文件中import,使用常量. 但这不是最佳实践 ...
- Android中保存静态秘钥实践(转)
本文我们将讲解一个Android产品研发中可能会碰到的一个问题:如何在App中保存静态秘钥以及保证其安全性.许多的移动app需要在app端保存一些静态字符串常量,其可能是静态秘钥.第三方appId等. ...
- RESTFul中的那些事(1)---在RESTFul中,HTTP Put和Patch操作的差别?
笔者在用调用Google Calendar和Google Tasks的RESTFul API的时候.遇到了一个特殊的操作,PATCH. 那么PATCH操作和PUT操作的差别是什么呢? 依据PATCH ...
- RESTFul中的那些事(2)----怎样支持RESTFul的HTTP Patch方法?
我们在调用RESTFul服务的时候,有的时候.第三方的服务会提供支持PATCH 操作的方法,在这样的情况下.我们假设我们以下的这样的方式, 去调用PATCH操作.肯定会返回40X的错误. PATCH ...
- 10个有关RESTful API良好设计的最佳实践
Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...
- [转]10个有关RESTful API良好设计的最佳实践
Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...
- 10个有关RESTful API良好设计的最佳实践(转)
原文地址:http://www.jdon.com/soa/10-best-practices-for-better-restful-api.html Web API已经在最近几年变成重要的话题,一个干 ...
- iOS 学习 RESTful 中 Http 的幂等性
一. RESTful RESTful (Representational State Transfer) 是一种常用流行的软件架构,设计风格或协议标准.提供了一组设计风格和约束条件.主要用于客户端和 ...
随机推荐
- NIO三大组件之Buffer
什么是Buffer Buffer(这里并不是特指Buffer类)是一个存储数据的容器,与数组类似(其实底层依旧是用数组的结构来存储数据),但不同的是,Buffer对象提供了一组更有效的方法去进行写入和 ...
- Redis 通过 RDB 方式进行数据备份与还原
Redis 通过 RDB 方式进行数据备份与还原 Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原 Redis 持久化 ...
- POJ_1273 Drainage Ditches 【网络流】
一.题面 Drainage Ditches 二.分析 网络流的裸题. 1 Edmonds-Karp算法 求解网络流其实就是一个不断找增广路,然后每次找到一条增广路后更新残余网络的一个过程. EK算法主 ...
- Django之缓存、信号和图片验证码、ORM性能
一. 缓存 1. 介绍 缓存通俗来说:就是把数据先保存在某个地方,下次再读取的时候不用再去原位置读取,让访问速度更快. 缓存机制图解 2.Django中提供了6种缓存方式 1. 开发调试 2. 内存 ...
- io流(文件字符流(FileReader,FileWriter文件的复制))
文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...
- CentOS7使用NTP搭建时间同步服务器
前言 为什么要搭建时间同步服务器呢?场景是这样的. 我们有两台CentOS服务器,其中一台是可以连接外网的,下文中我们称它为A服务器,另一台不能连接外网,但是与A服务器在同一局域网中,下文中我们称它为 ...
- java例题_43 求0—7所能组成的奇数个数
1 /*43 [程序 43 求奇数个数] 2 题目:求 0-7 所能组成的奇数个数. 3 */ 4 5 /*分析 6 * 1.0不能作最高位且最低位只能是1,3,5,7; 7 * 2.没有限定是几位数 ...
- Rancher 安装和使用-实践
Rancher 安装和使用 Rancher是一个完整的,开源的平台,用于在生产环境中部署和管理容器.它包括Kubernetes,Mesos和Docker Swarm的商业支持发行版,使得在任何基础架构 ...
- 【Flutter 3-5】Flutter进阶教程——在Flutter中使用Lottie动画
作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) Lottie动画 在移动开发中总是需要展示一些动画特效,作为程序员的我们并不是很擅长用代码做动画,即便是有些动画可以实现,在跨平台的过 ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之实例类型-10
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之实例类型-10 欢迎加QQ群:1026880196 进行交流学习 实例类型 #controller1 ...