哈哈~标题党了,各位。
事情是这样的,今天在做接口测试,我对接口的每一个传参都进行了长度和数据类型验证。发现每个传参在后台都没有校验,然后和开发人员沟通后出现了以下对话。
我:接口传参长度和数据类型应该与数据库设计的对应字段保持一致。(该接口是实现保存功能)
开发:接口参数没有可能完全校验,代码量非常庞大 性能也受影响
开发:这些都要检查是不是真实有效 全部去数据库中查一遍,这样就要查 N 遍数据库,校验都能把性能搞死去
所以我想请教一下各位大佬,以下问题。解决我自己的疑惑
1、一般的软件公司是有此规范吗(对参数长度数据类型和数据库保持一致)
2、如果进行这些校验真的会造成大量的冗余代码和对接口性能影响会很大吗?(这里我说一下自己的理解,我认为接口传输到 java 代码层面上,封装对应的校验长度和类型的方法是不至于会对接口造成很大的性能影响,更别提冗余代码。也不会出现开发人员所说的要去查询 N 遍数据库的情况,因为在代码层面已经拦截并抛出异常了,不会再去到数据库进行查询)
3、各位大佬是怎么解决这样的问题吗,可以给一点思路或者方向吗。谢谢大家了。
具体问题具体分析。不了解你们的具体情况,无法做出回答。如果不考虑具体情况,就一般情况来说,我认为:
1,一般的软件公司是有此规范吗?
答:已经超越规范不规范的事情了,如果对长度和类型不做验证,可能无法插入数据库,必须得有验证
2,如果进行这些校验真的会造成大量的冗余代码和对接口性能影响会很大吗?
答:影响大不大看具体情况,一般情况下不管如何必须要对输入得数据验证
3,各位大佬是怎么解决这样的问题吗
答:肯定要验证啊,不管是框架有相关得方案,还是自己写代码验证(验证是否符合业务,是否符合数据长度等)
我比较好奇,没有验证得话,你输入长度超过数据库约束长度的参数,会怎么样?
1、我回答一下第三点的疑惑,后台会捕捉到数据库的报错,然后后台抛出异常,接口返回的响应信息为公共异常,“无法查询数据库信息”
2、但我觉得接口层面做了这两个校验会把很大一部分的安全问题都拦截了啊,所以我觉得是有必要的,当然从功能层面上考虑确实是增加了开发人员的工作量~
@高级点工(Asion): 这报错也太模糊了吧,比如说,没有数据,或者您请求的xxx不存在,请重新选择之类的,都比这好
【这些都要检查是不是真实有效 全部去数据库中查一遍,这样就要查 N 遍数据库,校验都能把性能搞死去】
真实性这一点,我不了解情况不好说,这里先忽略!但基本的长度和数据校验需要,不然直接报错,返回一个“无法查询数据库信息”,鬼知道啥意思~至少得给个详细信息吧
后台确实是报错,但从用户角度的话是不会出现这个错误给到用户的~
都会有验证的,有的是前端,有的是后端,有的保险起见前后端
但是,前端的字段长度应与DB长度一致是确定的
沟通过后,开发人员是说这些的话代码很多地方都要写死,不够灵活,再说如果这些进行的话,后续数据库字段修改后,很多地方都得同步修改呢。
你们也是全部字段进行验证吗
@高级点工(Asion): 要灵活,那前端就不限定了,只后台校验就行了,前端只要在code不为200时,把message显示出来就行了,