最近一个朋友疯狂的和我吐槽公司的后端,说很常规、很普通的一个事儿,也就是验证一下子的事儿,非要搞的那么复杂,治标不治本,技术玩来玩去不但没进步还倒退了。

这是怎么回事呢?咱们就来聊聊这件"小事儿",大家可以看看自己内部是怎么做的。

咱们都是搞前端的,所以和后端打交道最多的就是调用后端接口获取数据,每个公司应该也都有自己的接口规范,传参规范等。

我这朋友的问题是这样的,前端请求接口,带过去了一些参数,但是其中有个参数没值,也就是空,但是呢后端在接收该值的时候没有类型判断(该字段是int类型),相当于直接把一个空字符串直接转为int类型。结果可想而知了,肯定是出异常了。导致业务上受到了影响。

比如,请求参数如下

name=bigerfe&age=&a=1

其中参数ageint类型,但是前端传了空,后端取参数的时候报错了。

此时,前端理解的是后端只需要后端做个容错处理就可以了,转化失败就给个默认值呗。但是后端理解的不太一样了,希望前端如果是没值的这种字段,就直接不要拼接到参数里,这种空串对于我们来说是没意义的,没意义的就不需要拼接了。然后要出一个传参规范,声明string类型的字段如果值为空串的,请求的时候就不要携带该参数。其他类型的会给一个默认值。

比如这样,age字段干掉了

name=bigerfe&a=1

我这朋友不乐意了,觉得这不合理,认为本质问题就是兜底处理没做好,怎么扯到规范上来了,觉得这个规范对他们的影响挺大,需要改代码,不能接收这个提议,但当时也不能说出一个更合理的理由,只能忍着。

其实我们客观来分析下,解决这个问题的最简单的方法就是后端做好容错处理,转换失败给个默认值,提到规范层面也不是不可以,但是要先明确问题产生的原因。

既然要做规范,这也是好事,这样各端就都统一了,也能让其他端避免再出现该问题,若遇到什么问题,不清楚的直接去查规范就好了。

如果后端初定了上面这样的规范,然后和大家一起讨论,看是否可行,如果你觉得不合理,你该如何反驳呢?

既然你觉得不合理,你觉得怎样合理?

有时候你觉得不合理,可能是你不想做,你没有这样的习惯而已。

你可能会说,不携带这个参数和传空串完全是两个意义。

如果是你遇到了这个问题,你该怎样处理?接受还是反驳?能不能找到一个走不通的场景?

。。。。。。。

毕竟该规范是不合理的,人多了总有人能想到不同的场景,在团队的讨论下,结果该方案没有通过,还是保持原来的方式,不会干掉这个字段。

  1. 接口规范中为每个字段说明其类型,并且给出默认值
  2. 服务端做统一的类型验证,不符合的直接给出错误码

那是被什么样的问题给拍回去了呢?

  1. 如果这个字段是必填的,而且是空串,那这个字段可以带吗?你给什么默认值?
  2. 比如我在后台要修改某个人的信息,改为空,怎么办?走不通了吧!

好了,别的不多说了,可能还有其他的场景,大家可以留言来讨论。

最后,有时候我们可能觉得某些方案不合理,但是一时也想不出去为什么不合理?其实也能做,但就是不想做,可能成本高,影响范围大。但如果真的不合理,那一定要拿出不合理的理由,或者在某些场景下走不通,而不是通过经验来说这样不合理。另外,有时候一个人想不出理由也很正常,所以这个时候就需要团队一起来讨论,把方案拿出来,合理不合理很快就见分晓,毕竟一个人的力量是有限的,人多了想法多,思考的角度也不同。通过讨论才能有更好的结论,这可能也就是团队存在的一个重要意义吧。

另外我们自己也不能处处依赖团队,时刻应该调整自己思考问题的方向和思路,当遇到不合理的方案的时候,不要陷入代码层面去,也不要只考虑自身的工作量,更不要被以往的经验和习惯给束缚了,应该跳出代码,多考虑业务中的实际场景,看是否都能满足。

点赞是最大的支持 

分页携带请求参数_一个值得深思的小问题 请求中的参数值为空要不要携带该参数?...相关推荐

  1. 训练softmax分类器实例_一个值得深思的问题?为什么验证集的loss会小于训练集的loss...

    编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息 在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三 ...

  2. 男子因微信被封从腾讯公司坠亡 前快播CEO王欣说出一个值得深思的问题

    男子因微信被封从腾讯公司坠亡 前快播CEO王欣说出一个值得深思的问题 8 月 27 日,有媒体报道称,有市民反映,自己 21 岁弟弟从腾讯用户接待中心顶楼坠亡.据悉,坠亡者此前被微信封号,多次申诉无果 ...

  3. 设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)

    关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求.而这样的重复请求如果是幂等的(每次请求的结果都相同,如查询请求),那其实对于我们没有什么影响,但如果是非幂等的(每次请求都会对 ...

  4. java命令行参数_一个 java 命令行参数顺序的坑

    tream Stream是在Java SE 8 API添加的用于增强集合的操作接口,可以让你以一种声明的方式处理集合数据.将要处理的集合看作一种流的创建者,将集合内部的元素转换为流并且在管道中传输, ...

  5. python 不定参数_人生苦短,我学不会Python。——函数中不定长参数的写法

    定义函数 我们可以定义一个实现自己想要的功能的函数.Python定义函数以def开头,定义函数基本格式如下: def 函数名 (参数列表):"函数_文档字符串"函数体 return ...

  6. corspost请求失败_记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法

    今天前后端在联调接口的时候,发生了跨域请求资源获取不到的问题. 首先说明下跨域问题的由来.引自HTTP 访问控制 的一段话: 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请 ...

  7. seq生成序列-f参数_使用seq()函数在R中生成序列

    seq生成序列-f参数 Generating a sequence in R using the function seq() is vital and has many uses in data a ...

  8. img标签请求拦截_如何给img标签里的请求添加自定义header?

    是这样的需求,有一个web页面,里面图片的上传和预览来自于一个独立的文件服务器,对http的请求需要进行访问权限的设置,就是在请求的header里加一个Authorization的字段.上传好说我用的 ...

  9. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

最新文章

  1. Keras入门(一)搭建深度神经网络(DNN)解决多分类问题
  2. for foreach循环
  3. matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息
  4. Qt/QML 窗口阴影边框实现
  5. mysql的limit和or_面试官:谈谈MySQL的limit用法、逻辑分页和物理分页
  6. 动态添加XtraTabControl
  7. Python学习16 正则表达式3 练习题
  8. 软件工程教学博客 (备份)
  9. 查询MySQL字段注释的 5 种方法!
  10. 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
  11. 关于jquery的$(document).on()事件多次执行的问题
  12. 汽车系统实现--搜索功能
  13. 同步fifo的串并_同步FIFO笔记
  14. brother标签打印软件_标签打印软件如何调整字体高度
  15. filter在CSS中的效果
  16. 内容管理领域举足轻重的100家公司
  17. linux ps命令查看当前线程正在执行的程序
  18. 图形学卡通人物绘制以及交互操作
  19. Android相对布局简单案例(附完整源码)
  20. 小程序如何写一个优美的tab选项卡

热门文章

  1. php 卡号算法,PHP实现通过Luhn算法校验信用卡卡号是否有效_PHP
  2. mysql got signal 11_mysql bug : mysqld got signal 11
  3. 哲学家就餐问题php代码,Python实现哲学家就餐问题实例代码
  4. 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
  5. 【2012百度之星/资格赛】H:用户请求中的品牌
  6. sqlalchemy 基操,勿6
  7. bash: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc: 没有那个文件或目录。...
  8. CentOS 6.7编译安装PHP7
  9. 广州技术沙龙第 4 期报名开始!
  10. 计算1-100之间 所有能被3 不能被 5整除的数 的 个数,每行打印 5 个