后端设计调整 / 失业的第 17 天

2022-07-07

昨晚和 @GZ 同学聊了很晚,回家洗洗睡就已经三点多,于是乎又睡到了中午。我那金山的同学还是咬咬牙去上班了,还表示她全部搞定了。因为小米那下单就可以直接选闪送,她的新手机 11 点多就到手了,少了一次拿“好人卡”的机会...

我选择去了 KFC 吃午饭,带了笔记本电脑,毕竟能白嫖空调,还有插座充电。选了个 30 左右的三件套套餐,比麦当劳什么的都要贵,但能品尝下别的风味也好吧==(不过这个插座估计使用次数太多了,里面的铜片特别松,我换了好几个姿势反复尝试,用纸巾垫着才勉勉强强插了进去)

饭后基本上就在继续优化着小窝后端的代码,还是此前 namespace 那个问题,修好之后给一个点赞表做了独立的模型层(原先在“通用函数”里面,有些奇怪),此前已经独立了「媒体」和「媒体分类」两个功能的模型层和接口,所以小窝后台也需要增加和修改对应的管理页面。

简单测试将代码发布到生产之后,我发现有一个很致命的问题,就是模型层如果根据某个条件获取到了不存在的的数据,将会返回 NULL,触发了强类型判断的异常,因为格式化函数(此前命名叫 filter,理论上叫 formatter 更好?这个命名模仿的 Vue 过滤器)接受的仅 Array

这个问题可能比较傻,但我晚上还是问了下 @Eric,如果接口获取的数据内容是不存在的,后端要怎么返回比较好,返回 nullfalse 还是空对象?

他说最好不要返回任何东西,返回 null 或者 false 这种情况是最容易找打的。因此最好的办法就是不进行返回,然后把 HTTP 状态码改成 404,标记成“不存在的东西”。如果是分页接口,可以返回 [] 空数组,也能强调这是一个“分页接口”。客户端只要检查到状态码不对就可以绕开设置数据的逻辑,自然也就不会有问题了。

我感觉他这个设计很中规中矩、合情合理,按照这样的设计思路,格式化器的类型限制还是维持原状,模型层如果获取不到数据直接返回 false 给控制器,控制器检查到没有数据后返回 404,就完美解决了!

配乐 小雨 郁闷
概览页 时间轴
奇趣音乐盒 技术源于 Kico Player
Emmm,这里是歌词君