热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

就这么一个简单的校验,80%的程序员却做不到,更不理解!

在学生管理系统里,其中会有学生信息采集的功能。程序结构不外乎下面的分层实现方式。 开发出来这个功能,我觉得大家都易如反掌了。当然易如反掌。 OK,我要说的是数据校验,以最简单的非空

在学生管理系统里,其中会有学生信息采集的功能。程序结构不外乎下面的分层实现方式。

 

开发出来这个功能,我觉得大家都易如反掌了。

当然易如反掌。

 

OK,我要说的是数据校验,以最简单的非空校验(例如:学生姓名不可为空)来说:

首先,前端页面的表单要校验,为空则不允许提交,非空则调用后端api接口来post数据。

其次,后端程序的controller里要校验,为空则直接返回错误提示,非空则调用StudentService类。

再次,StudentService类要校验,为空则直接返回错误提示,非空则在其他校验通过后,进行数据的持久化。

上面的“再次”,在单体应用内不做校验也可————而一旦是在RPC调用的情况下,是必须要做的。

 

那么,聪明的你,有没有,或者曾经有没有,忽视上面的几处校验呢?

 

你也许会说No. ————肯定会做校验呀。

你也许还会说but why?————为什么要这么多处校验呢?一个地儿校验住不就完了吗?

 

First,为什么前端要校验?

--> 前端页面校验不通过时,则直接在页面提示给用户了,好处:①响应快,因为无须调用后端api,也减少了网络通信;②用户体验会好一些。

Second,前端已经校验了,为什么后端还要校验?

--> 正常情况下是不需要后端再校验了。非正常情况下呢?例如,前端没拦住,再例如,请求不是前端发过来的...

Third,为什么service类还要校验?

--> 上面说了,如果是单体应用,你不校验也行。而如果是局域网RPC服务之间调用的话,你还真要加上这个校验。也是为了防止非正常情况的。

 

多次一举?

实际企业应用开发中,类似的需要多处“重复”做的校验包括:数据合法性校验、数据重复校验、幂等校验(幂等控制)、数据唯一性校验(数据防重控制)。

你可以不“重复”做这些校验,而simply依靠请求链路里的only一个节点的校验来cover。在这种情况下,你的系统没出现问题,只能说明你比较幸运。一直没出现问题,说明你一直比较幸运。

 

最近我们系统是出现了这样的事故。一个中台dubbo服务提供了数据的新增接口,供下游业务线调用。系统运行了大半年也没出现问题,而最近却翻车了。一个业务线在特定的分支逻辑里缺乏有效的防重控制,致使在业务高峰期不停地重复刷这个接口(传递同样的数据),而这个dubbo接口里没有做业务防重。瞬时的高频调用,不仅让dubbo服务出现故障,还造成了大量的重复数据。随之而来的是运营的催促,客户的投诉,我们在处理重复数据时,耗费了大量的人力和时间成本。这一张多米诺骨牌,让我们付出了惨痛的代价。

 

我是因为遇到了这么一个事故才写这个blog吗?

不是!许多大的事故往往就是类似小疏忽导致的。我遇到的这样的事故简直太多了。

你没有遇到这样的事故吗?

我不信!

So,苦口婆心一番,愿小伙伴们别再为这样的疏忽而翻车。

 



推荐阅读
  • 本文探讨了如何在Sitecore 9环境中通过Postman使用API密钥发送请求,包括解决常见错误的方法。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • 重新审视Kubernetes的必要性
    近期,我注意到不少人误以为我是Kubernetes的推广者。实际上,我只是分享了一些适合用Kubernetes解决的案例。本文旨在探讨Kubernetes的适用场景,并提供一些替代方案。 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • AB PLC与西门子S7-1200以太网通信详解
    本文探讨了在工业自动化领域中,如何实现AB PLC与西门子S7-1200之间的直接以太网通信。文中详细介绍了通信的基本原理、配置步骤及编程技巧,为工程师提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了如何利用go-zero框架从需求分析到最终部署至Kubernetes的全过程,特别聚焦于微服务架构中的网关设计与实现。项目采用了go-zero及其生态组件,涵盖了从API设计到RPC调用,再到生产环境下的监控与维护等多方面内容。 ... [详细]
  • Android开发经验分享:优化用户体验的关键因素
    随着Android市场的不断扩展,用户对于移动应用的期望也在不断提高。本文探讨了在Android开发中如何优化用户体验,以及为何用户体验的重要性超过了技术本身。 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 本文详细介绍了Spring AOP注解的基本概念及其实现方式,并通过实例演示了如何在项目中使用这些注解进行面向切面的编程。旨在帮助开发者更好地理解和运用Spring AOP功能。 ... [详细]
  • APP及其接口测试全面解析
    本文深入探讨了移动应用(APP)及其接口测试的关键点,包括安装与卸载、功能一致性、系统兼容性、权限管理等多个方面的测试策略,以及针对接口的功能、边界值、参数组合等专业测试方法。同时,介绍了几款常用的测试工具,帮助开发者提高测试效率和质量。 ... [详细]
author-avatar
胡子壮熊_623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有