java接口的幂等性

作为一个后端程序员,做后端接口的我的日常工作。其实我和大部分的后端程序员日常的工作一样都是CRUD,最常用的就是一个controller,一个service,一个impl实现类,直到最近有被问起,你做的接口有幂等性吗?一开始有点懵,后来去查了下,整理了下思路,做个随笔。

幂等性的定义:对于后端业务系统来说 ,外部对于同一个操作的一次或者多次请求如果都能返回一样的结果,那么我的接口就是拥有幂等性的。

在实际的开发中,可以根据不同的场景来使用不同的方式来做接口的幂等性处理。

场景:比如在一个支付场景 ,用户确认了订单,点击支付去付款,可能由于手误或者网络原因,前端向后端发起了两次请求支付的请求,如果接口没有幂等性的保证,那么用户会支付两次,这显然是不合理的。这种情况下我们有多种方式来保证接口的幂等性

方案1:我们的处理一般是给订单加一个支付状态,在付款之前会查询这个订单的支付状态,如果这个订单在之前的一次请求中已经支付,那么后面来的这个请求我们就不用去发起支付,直接返回用户支付成功即可,这样这个接口就可以说是有幂等性保证的。

文案2:就是我们在设计表的时候,有一张表来记录用户的支付记录,这个支付记录其中的一个字段是订单ID,我们可以把这个订单ID设置为唯一性的索引,如果用户对同一个订单发起了多交的支付,那么在插入这个表的时候必定会违反唯一性索引约束,这个时候我们也可以直接返回用户支付成功而不用真的去二次付款。

场景3:使用全局的唯一ID,比如我们可以把用户的ID和订单ID和对订单的操作类型生成一个唯一的ID,那么同一个用户对一笔订单的支付操作它的唯一ID一定是一样的,我们在每一个请求进来的时候去查询这个唯一 的ID,如果存在,那么这笔订单是已经支付过的,我们也可以不用再次支付而直接返回用户成功。

其实的我们的日常开发中,虽然不一定有接口幂等性的概念,但是我们在设计接口并且开发的过程中会不知不觉的对接口的幂等性做一定的保证,这次随笔也只是把接口幂等性的概念加深一些,以便在日后接口的开发过程中更加注意接口性能和接口可用性的思考。更加高效,快乐的写代码

猜你喜欢

转载自www.cnblogs.com/atinalove/p/12674023.html