当前位置: 首页 > news >正文

软件工程课程网站开发深圳专业网站建设企业

软件工程课程网站开发,深圳专业网站建设企业,休闲采摘园网站建设,企业网站带后台API的幂等性#xff08;Idempotent#xff09;#xff0c;是指调用某个方法1次或N次对资源产生的影响结果都是相同的。GET请求默认是幂等的#xff0c;因为它只是查询资源#xff0c;而不会修改资源。而POST请求默认是不幂等的#xff0c;多次调用POST方法可能会产生不同… API的幂等性Idempotent是指调用某个方法1次或N次对资源产生的影响结果都是相同的。GET请求默认是幂等的因为它只是查询资源而不会修改资源。而POST请求默认是不幂等的多次调用POST方法可能会产生不同的结果并会创建多个资源。想象一下你在扫码支付时输入金额后点击了2次“确定”按钮肯定不希望扣2次款。幂等性保证了操作只会执行一次。1.思路使用ASP.NET Core过滤器来处理POST请求检查请求头中的幂等键IdempotencyKey。如果在缓存中未检查到IdempotencyKey则真实执行操作并缓存响应数据否则直接返回缓存的响应数据。这样操作只能对资源产生一次影响。原理示意图如下2.实现2.1 IdempotentAttributeFilter创建自定义Filter。使用OnActionExecuting方法在执行操作前检查缓存如有缓存直接返回context.Result使用OnResultExecuted方法在执行操作后缓存响应。代码如下public class IdempotentAttributeFilter : IActionFilter, IResultFilter {private readonly IDistributedCache _distributedCache;private bool _isIdempotencyCache false;const string IdempotencyKeyHeaderName  IdempotencyKey;private string _idempotencyKey;public IdempotentAttributeFilter(IDistributedCache distributedCache){_distributedCache  distributedCache;}public void OnActionExecuting(ActionExecutingContext context){Microsoft.Extensions.Primitives.StringValues idempotencyKeys;context.HttpContext.Request.Headers.TryGetValue(IdempotencyKeyHeaderName, out idempotencyKeys);_idempotencyKey  idempotencyKeys.ToString();var cacheData  _distributedCache.GetString(GetDistributedCacheKey());if (cacheData ! null){context.Result  JsonConvert.DeserializeObjectObjectResult(cacheData);_isIdempotencyCache  true;return;}}public void OnResultExecuted(ResultExecutedContext context){//已缓存if (_isIdempotencyCache){return;}var contextResult  context.Result;DistributedCacheEntryOptions cacheOptions  new DistributedCacheEntryOptions();cacheOptions.AbsoluteExpirationRelativeToNow  new TimeSpan(24, 0, 0);//缓存:_distributedCache.SetString(GetDistributedCacheKey(), JsonConvert.SerializeObject(contextResult), cacheOptions);}public void OnActionExecuted(ActionExecutedContext context){}public void OnResultExecuting(ResultExecutingContext context){}private string GetDistributedCacheKey(){return Idempotency:  _idempotencyKey;} } 2.2 IdempotentAttribute创建自定义Attribute。声明了IdempotentAttribute的Class或者Method在运行时会创建IdempotentAttributeFilter。代码如下[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple  false, Inherited  false)] public class IdempotentAttribute : Attribute, IFilterFactory {public bool IsReusable  false;public IFilterMetadata CreateInstance(IServiceProvider serviceProvider){var distributedCache  (IDistributedCache)serviceProvider.GetService(typeof(IDistributedCache));var filter  new IdempotentAttributeFilter(distributedCache);return filter;} } 3.使用3.1 创建项目新建ASP.NET Core Web API项目实现代码如下private static ListWeatherForecast _db  new ListWeatherForecast();[HttpPost] public WeatherForecast Post(int temperature) {var data  new WeatherForecast { TemperatureC  temperature };_db.Add(data);return data; }[HttpGet] public IEnumerableWeatherForecast Get() {return _db.Select(p  new WeatherForecast{TemperatureC  p.TemperatureC,Summary  Summaries[rng.Next(Summaries.Length)]}).ToArray(); } 这里用一个静态变量模拟数据库POST请求写入数据GET请求读取数据。3.2 设置幂等为Post方法加上Idempotent Attribute[Idempotent] public WeatherForecast Post(int temperature) 3.3 注册分布式缓存从上面的原理图我们可以看到必须增加分布式缓存用于保存幂等键的值和响应数据。修改Startup.cspublic void ConfigureServices(IServiceCollection services) {...services.AddDistributedMemoryCache(); } 3.4 测试运行Web API使用不同IdempotencyKey执行POST请求然后获取数据:可以看到同一IdempotencyKey执行了2次但是只写入了一条数据成功结论为了确保关键Web API的高可用性和业务连续性实现幂等性是重要的一步。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“记住我
http://wiki.neutronadmin.com/news/97508/

相关文章:

  • 网站正能量晚上免费软件网页设计基础知识点考试
  • 企业网站建设报价单医院内网网站建设
  • 网站与云平台区别吗电商后台管理系统
  • 怎么做网站弹幕效果网页设计图片在左文字在右
  • 网站不同颜色wordpress程序在ftp中上传到空间 网页怎么打不开
  • 网页建站费用中小企业网络营销存在的问题研究论文
  • 什么网站找厂做袜子wordpress 转hexo
  • 新网站怎么做论坛推广郑州新闻发布
  • 做简单的网站全国文明网联盟网站建设
  • 现在做网站用什么程序修改文章缩略字数 WORDPRESS
  • 做教育app的网站有哪些内容江南大学做网站
  • 建设网站是什么意思深圳市大型公司
  • 免费建网站软件系统网站开发有哪些书籍
  • 深圳手机端网站建设专业公司企业营销策略有哪些
  • 网站没后台怎么修改类容四川建设厅官方网站九大员通知
  • 专业积分商城网站建设绍兴网站建设做网站
  • 长沙公司网站建立找网络公司建网站的流程
  • 南昌网站开发设计制作实践活动
  • 做塑料的网站高端制作网站设计
  • 一级a做爰片免费网站孕交视频教程活动策划案格式模板和范文
  • 怎么查看网站的域名php装修网站源码
  • 企业需求做网站在哪儿交易用asp做网站课程
  • 广告传媒公司网站wordpress增加登录账户
  • 网站建设的客户wordpress内存高
  • 做网站_接活抖音搜索seo软件
  • 资讯类网站开发文档网站标准规范建设
  • 做ppt的动图下载哪些网站建设网站需要哪些硬件设施
  • 网站栏目结构网页设计网站
  • 以前做弹幕现在的电影网站wdcp创建多个网站
  • 河北建设厅网站登陆怎么找附件四川住房城乡建设厅官网