1、什献垴淄睬么是Restful软件架构?Restful是一种面向资源的软件架构。日常使用计算设备时,实际上,计算设备无时无刻不在与另外一台设备通信,比如QQ,微信等等,我们不断的从一台设备上获取数据,提交数据,更新数据,删除数据。这里的数据不单单是指数字和文本,更包括图片,文件等等。这种通信方式称为分布式通信。设备在端口的某一处公开一系列的操作供其他设备使用。这些操作就是服务。我们通过调用设备公开的服务,完成相关的操作并在必要的时候返回数据。然而,不管是使用哪种方式实现服务。客户端使用服务都是重量级的,繁琐的。因为客户端要为访问这些服务建立代理,并通过代理来与服务端设备通信。而对于一些比较轻量级的通信,面向服务显然增加了开发的复杂性。REST 是一种轻量级的面向服务架构风格,其实现和操作比面向服务更为简洁,可以利用 HTTP 协议实现在响应速度,性能、效率和易用性上都优于面向服务的软件架构。
2、Restful软件架构的特性资源:资源即使分布在网络上的设备实体(比如文本,图片,歌曲,文件,数据…)表现层:用于展现资源的设备URI:指向网络搏皋咬夼实体资源的地址状态转换:将无状态的HTTP协议通过表现层展示状态
3、分析为什么出现问题?我认为是你在构架过程中出现了问题!所有request必须有一个主键(id)。这个主键必须是根据某些关键信息生成的——因为你的应用场景里你是会把某些请求判定为“重复”的。那么你就要分析出请求被判定为重复的条件是什么,然后根据这个条件生成主键。如果你已经开始做买卖数据了,那么你所有的数据库操作都应该是当作事务处理的。所以出现了无状态的RESTful中订单重复提交的问题。
4、解决方案一:客户端控制客户端控制唯一流水只能提交一次,服务端未返回,不允许重复提交。
5、解决方案二:服务端控制服务端获取该唯一流水号的锁,如果获取不到锁表明之前已存在提交,事物处理完释放锁,业务级别根据唯一主键自行判断
6、解决方案三:生成唯一流水号唯一流水号,可以客户端生成,也可以服务端生成。服务端可根据userId+业务主键Id+客户端时间戳+客户端随机数(可以用多个字段,或所有提交内容生成唯一串)
7、方案检查:TEST实施方案后可进行TEST检查。