幂等性文档分享.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

幂等性

幂等性强调的是外界通过接口对系统内部的影响,只要一次或多次调用对某一个资源应该具有同样的副作用就行。

注:是对资源造成的副作用必须是一样的,但是返回值允许不同!

目前API网关支持基于用友MDD框架开发的接口的幂等性。

MDD幂等性说明

MDD框架已提供一套幂等性方案,MDD幂等性目前只支持单条数据保存接口(MDD框架后续会增加批量保存接口的幂等性),只对body体是data的结构有效,通过resubmitCheckKey字段来进行控制。

MDD幂等性解决方案

调用方调用MDD幂等的OpenAPI时,在原参数中增加resubmitCheckKey参数(长度不能超过32位)

若body参数中的data结构是对象,则在此对象里增加一个resubmitCheckKey参数,如下:

原body体:

{

data:{

id:,

code:,

name:

}

}

需要进行幂等性的body体:

{

data:{

id:,

code:,

name:,

resubmitCheckKey:951ada30e0969e954f5d9058fff6a512

}

}

resubmitCheckKey生成规则:

场景一:根据上游单据进行保存,就将上游单据ID作为resubmitCheckKey

场景二:没有上游单据的,调用方需按API幂等处理要求,传参数resubmitCheckKey,且要保证同一个接口在租户内resubmitCheckKey值一定是唯一的,避免2个不同单据的数据保存时由于resubmitCheckKey重复,造成单据无法保存的情况

注:网关为了保证租户间生成的key互不影响,会在resubmitCheckKey基础上拼接apiid和tenantid

网关接收到请求后,若是MDD幂等API,网关会判断是否有调用方传递的resubmitCheckKey的缓存,若没有缓存则调用后端服务,并将后端服务返回的结果给调用方,若后端服务返回了成功结果,网关会缓存resubmitCheckKey和请求成功返回的结果数据;若有缓存,则说明是重复提交,网关不再调用后端服务,直接将缓存的请求成功结果数据返回给调用方;

注:网关缓存的resubmitCheckKey和请求成功返回的结果数据只保留1小时,超过1小时的请求,网关会直接调用后端服务,此时MDD框架的幂等机制会生效,会将上次成功返回的主键id返回给调用方。

3.幂等接口的返回值格式说明支持幂等的接口在不同场景下返回的结构有所不同,调用方一定要对不同场景返回的格式进行兼容处理

场景一:当调用方第一次调用接口,后端服务处理成功后,返回成功结果,此时返回结果结构和API文档里描述的返回结构完全一致,data里是完整的业务对象,例如:

{

code:200,

message:操作成功,

data:{

id:2172175075348736,

code:CGA20001000113,

bustype_code:A20001,

currency_code:CNY,

currency_moneyDigit:2,

currency_priceDigit:2,,

vendor_code:0000000001,

vouchdate:2021-03-0500:00:00,

verifystate:0,

pubts:2021-03-1511:30:45,

purchaseOrders:[

{

id:2172175075348737,

bustype:0,

rowno:1,

status:Insert,

proDescFlag:0,

totalRecieveQty:0,

storageqty:0,

pubts:2021-03-1511:30:45

}

]

}

}

场景二:当调用方使用同一个resubmitCheckKey,若在第一次成功调用请求1小时内又重复调用,网关会返回第一次请求成功的返回结果,即和场景一格式一样

场景三:当调用方使用同一个resubmitCheckKey,若在第一次成功调用请求1小时后又重复

文档评论(0)

辉啊~ + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档