数据不全需要在接口侧补全吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cp7719
V2EX    程序员

数据不全需要在接口侧补全吗

  •  
  •   cp7719 2024-06-19 11:14:19 +08:00 2920 次点击
    这是一个创建于 526 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个查询周数据的需要,实际用户只在昨天产生了行为数据。前端侧说为了通用性,要求接口补齐一整周的数据,并按照 72460 ,每分钟都要数据记录,这样前端根据时间点来绘图,这种要求合理吗? 大家遇到这种场景时是怎么定义接口测规范的?

    21 条回复    2024-06-19 22:37:20 +08:00
    rockddd
        1
    rockddd  
       2024-06-19 11:17:38 +08:00   2
    我们公司后端强一些,数据都在后端处理的。前端都是年轻人,对着 UI 画样式就可以了,数据往页面一丢 不用过脑子
    x66
        2
    x66  
       2024-06-19 11:21:18 +08:00   1
    不合理,
    如果没有特殊业务逻辑的补全,前端也可以做,后端补了只会让 response 变大,不管是从经济上讲还是从 api 性能上讲都没有好处。
    而且服务端的资源要钱,而浏览器的计算资源不需要我们付费
    huifer
        3
    huifer  
       2024-06-19 11:21:39 +08:00
    没有数据就应该没提供,和 json 是否要将 null 的数据返回这个字段一样.
    hxtheone
        4
    hxtheone  
       2024-06-19 11:22:21 +08:00 via iPhone   1
    个人看法, 谁对空值有业务需求谁来处理, 试想一下, 如果这个接口有两个调用方, 为了一个调用方补齐了数据, 那对另一个调用方来说, 它怎么知道这个数据是真实的还是后端补的
    sampeng
        5
    sampeng  
       2024-06-19 11:27:06 +08:00
    你问别人没用。。这种事没有什么绝对对错。谁吵得过谁就是对的
    windmoonwind
        6
    windmoonwind  
       2024-06-19 11:33:04 +08:00
    @hxtheone 领导偏心的话,会让你再多做个接口,专用于输出美化修补后数据
    snowonion
        7
    snowonion  
       2024-06-19 11:34:06 +08:00
    1. 谁补:
    这里补的数据没有信息量,理论上前后端都可以干,就是谁多干点谁少干点的分工问题。然后接口的 spec 要跟着变。
    理想世界:“工友,我的前端代码(我用的轮子)不够鲁棒,处理不了数据点没塞满的情况,你能帮忙处理吗?”
    楼主情况:“为了通用性”

    2. 假如后端补,注意约定如何区分零值( 0 、空串)/ 没有值。这也可以应对 4# 的顾虑。

    3. 性能方面,数据越稀疏,后端补越不合理。(啊楼主说的是往前补齐数据;不知道在开始有数据之后值为 0 的时间点你们怎么处理)
    senl
        8
    senl  
       2024-06-19 11:35:24 +08:00
    不合理吧,处理肯定是前端处理的,前后端可以约定 null 值都是默认不传的,约定好默认布空就好了
    flytsuki
        9
    flytsuki  
       2024-06-19 11:56:52 +08:00
    前端去补。但是前后端都是我写的话,哪边方便哪边处理
    QUC062IzY3M1Y6dg
        10
    QUC062IzY3M1Y6dg  
       2024-06-19 12:00:33 +08:00
    一看到这,我真特么想吐槽我们公司后端,字段空值就不能统一掉,啥又有,null, 0, "", [],等等等等,直接给 res 设为 data: null ,没有任何统一风格可言,字段名称 小写大写驼峰下划线混着用,甚至获取和提交的接口,明明是同一个东西,字段名都不一样
    IvanLi127
        11
    IvanLi127  
       2024-06-19 12:12:32 +08:00
    接口名称就是说查一周的数据,那需要补全。当然如果叫查询某日到某日的数据就不需要你补了。

    传输的数据量变大了那这个和接口在设计上是否补全数据无关,和传输的协议没做压缩有关,如果一开始没考虑到压缩问题,那只能商量看怎么办。要是因为被压缩了导致前端说数据不全,那就是前端实现问题了。

    理论上前端需要对收到的数据重新反序列化,但是如果你的后端只为这个前端应用服务,那反序列化的部分可能会算在你这,在这个情况下你没得选,只能听前端的。否则以后端为准。
    xiangbohua
        12
    xiangbohua  
       2024-06-19 12:38:37 +08:00 via iPhone
    我觉得要看接口定义了,业务接口肯定要符合接口设计的含义,数据接口的话可能看展示方式吧,我还是倾向于补全
    jones2000
        13
    jones2000  
       2024-06-19 15:14:35 +08:00
    @IvanLi127 数据量大,直接 protobuf , 连续相同的数据压缩比很大。
    NessajCN
        14
    NessajCN  
       2024-06-19 15:29:45 +08:00
    屁大点事.....两行代码的问题也值得拿出来说
    前端是不会用 if 吗
    JoJoWuBeHumble
        15
    JoJoWuBeHumble  
       2024-06-19 15:35:13 +08:00
    @shuxhan 你这个是管理的问题了
    Sawyerhou
        16
    Sawyerhou  
       2024-06-19 16:03:02 +08:00
    正常来讲不应该,接口只提供数据,不负责计算,补数据属于计算了,如果接口提供补数据功能,就会出现有人希望最新填充,有人希望均值填充,有人希望 0 填充,有人希望字符填充......那接口就乱套了。
    Sawyerhou
        17
    Sawyerhou  
       2024-06-19 16:08:06 +08:00
    @Sawyerhou 不过如果填充格式可以定死的话,也不是完全不可接受。
    me1onsoda
        18
    me1onsoda  
       2024-06-19 17:38:44 +08:00
    @shuxhan null =0 吗?前端还是前端啊
    neptuno
        19
    neptuno  
       2024-06-19 18:02:34 +08:00
    后端返回太多无用的数据,用户量大了,都是流量,都是公司的钱,看你怎么把这个意思跟领导、前端解释了。
    shadowyue
        20
    shadowyue  
       2024-06-19 18:09:07 +08:00
    本质上是你们产品出需求没说清楚,显示最近一周的图表,如果数据不够一周怎么办。
    先让产品出方案。

    技术上说,我是前端,不过我觉得两边谁处理都行都行,无非工作量的问题。
    你和前端沟通不下来,找领导拍板就行。
    lqm
        21
    lqm  
       2024-06-19 22:37:20 +08:00
    我是前端,这个问题得产品明确需求。
    1 ,如果你补 0 了,那么前端出图(假设 echarts )是连续线段,如果你没有补 0 ,前端出图是断断续续的
    2 ,横坐标数据列表需要前端自己计算出来

    我遇到过更恶心的场景,产品需求横坐标步长是动态的,但是后端出的数是不连续的,前端需要从后端不连续的数据自己推断步长。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5204 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:12 PVG 16:12 LAX 00:12 JFK 03:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86