V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

因为产品需求变动,又急着上线,于是接口参数变成动态,于是安卓开发发怒说改不了

  •  
  •   zjsxwc ·
    zjsxwc · 37 天前 · 3052 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为产品需求变动,又急着上线,于是接口参数变成动态数量,

    原先接口发送和返回的数据是 {"xxxN1": 123, "xxxN2":123} 2 个参数,

    现在产品经理改需求,说用户反馈很好,但要把 2 个这种参数限制,变成动态最多会有 500 多个,

    于是我最简单最快的方式是把接口参数改成 {"xxxN1": 123, "xxxN2":123,..., "xxxN500":123, "xxxN501":123},其中 "xxxNn"没有的数据可以不传。

    这么改了后,安卓开发者发怒说改不了,但前端很容易改几分钟就兼容上线了。

    可能安卓是写死了结构体,不能动态?

    所以安卓应该如何修改?
    duhb
        1
    duhb  
       37 天前
    500 个参数?那得写多大的数据模型,model 里的参数都是一一对应的,否则 json 解析框架解析不成功,转换不成 model 实体。
    nice2cu
        2
    nice2cu  
       37 天前
    参数太多了 不是很合理的 后端咋知道 n 代表那个业务字段 估计还是手动维护
    asdhak
        3
    asdhak  
       37 天前
    产品经理提需求就行了,咋还指导上接口了?那不就外行指导内行了嘛
    kyuuseiryuu
        4
    kyuuseiryuu  
       37 天前
    让产品直接说希望这么实现的目的是啥。什么业务问题必须要这样的实现?

    产品经理又不是架构师,只需要描述业务需求,不应该染指软件设计。
    woodfizky
        5
    woodfizky  
       37 天前
    这种应该是把参数解析成了模型,这个模型是静态的。
    如果要改成动态的估计用 Map 可以支持?但是数据类型不确定,就算确定可能逻辑要重新写一些。
    Lisa9527
        6
    Lisa9527  
       37 天前
    这就回归到开发设计的问题了
    nekomiao
        7
    nekomiao  
       37 天前 via Android
    直接 map 或者 jsonobject 接收了再解析 key 不就行,写起来是丑了点有啥改不了的。分分钟就改完了,要不是他菜要不是他懒
    fredweili
        8
    fredweili  
       37 天前
    改一下这个结构,用两个数组,keys 和 values ,传输时候用逗号什么分割序列化,再加一个 count 校验
    这也比这么大的 map 好看多了,变来变去的 kotlin 不好写 model
    luwies
        9
    luwies  
       37 天前
    不应该改成数组存放这 500 个参数吗?我也会说改不了。。。
    walker748
        10
    walker748  
       37 天前
    @nekomiao 你可真是个小聪明啊👀
    lw10645
        11
    lw10645  
       37 天前
    改不了,谁家好人这么写代码
    fregie
        12
    fregie  
       37 天前
    谁着急上线谁想办法呗
    internelp
        13
    internelp  
       37 天前   ❤️ 3
    要不然这么改

    ```
    {
    "count": 2,
    "data": [
    {
    "key": "xxx1",
    "value": "v1"
    },
    {
    "key": "xxx2",
    "value": "v2"
    }
    ]
    }
    ```
    han3sui
        14
    han3sui  
       36 天前
    我们之前也是,因为 js 的兼容性太好,导致后端写接口会放飞。

    然后多端上线的时候,遇到安卓、ios 这种数据类型要求比较严格的,经常会冲突。
    FireKey
        15
    FireKey  
       36 天前
    我之前接过一个接口,每个状态的结构都不一样,那才是真奇葩
    xz410236056
        16
    xz410236056  
       36 天前
    @internelp 一个效果,只要用 ORM ,你就得把 key 转成固定的属性,难道一个类 500 个属性吗。这玩意应该用数组。如果每个 key 不一样,那也应该是数组里面套字典
    qxdo1234
        17
    qxdo1234  
       36 天前   ❤️ 4
    写成动态数组去维护比较好一点吧,[{key_name:xxx, key_value:xxx, key_type:xxx}] 这样子的,这样前端后端解偶了,后续也不会遇到参数变更,两边都要改接口,只要两边各自去写自己的逻辑就好了。
    guanhui07
        18
    guanhui07  
       36 天前
    我跟 13 楼的一样
    kookpua
        19
    kookpua  
       36 天前
    直接用 json 吧
    jiahailiang22
        20
    jiahailiang22  
       36 天前
    17 楼 正解
    Light3
        21
    Light3  
       36 天前
    没有说明传输数据是直接再次请求接口
    还是本地操作 然后请求对应数据

    如果参数过多 还是本地操作的话 确实和 2 个参数差距有点大
    发怒也是必然的 再者 前端是快 安卓还要打包 加固..

    所以外行领导内行就是这样 没有思考
    ramcasky
        22
    ramcasky  
       36 天前
    我最近也是遇到 JAVA 类型定的很死 就很奇怪 字符串的硬要前端给整型,整型的硬要我给字符串,想了想我说都给 string 比较通用,他说改不了,有点纳闷那么不灵活的吗
    meeop
        23
    meeop  
       36 天前
    不会用 json ,list ,甚至暴力写一个 xxxN1-xxxN100000 的结构去解析吗

    都 ai 时代了,只要逻辑能说清楚,代码多点也没啥
    southsala
        24
    southsala  
       36 天前   ❤️ 3
    你们这些野路子看着真的火大
    julyclyde
        25
    julyclyde  
       36 天前
    安卓又不是 C 语言,哪儿来的结构体这种东西?

    关键是 app 已经发出去了啊,你就算再改也是下一个版本了
    那已有版本的用户如果赖着不升级咋办?
    xiang0818
        26
    xiang0818  
       36 天前
    xxxN1 ,这种传参数,谁教你的
    zjsxwc
        27
    zjsxwc  
    OP
       36 天前
    @xiang0818 #26 历史遗留代码就这么写的啊, 我不是不想改成 `{"id": 1, "key": "xxx", "value": 123}` 来 代替 "xxxN1":123 ,就是原先代码已经这样了,我也懒得改,影响我下班。
    icyalala
        28
    icyalala  
       36 天前   ❤️ 4
    所以楼主不是野路子,楼主知道什么结构是合理的,但是因为 “懒得改,影响我下班” 而吧工作量转移给客户端
    liqingyou2093
        29
    liqingyou2093  
       36 天前
    使用数组,同 17
    BwNVlwSq
        30
    BwNVlwSq  
       36 天前
    确实抽象...
    soulflysimple123
        31
    soulflysimple123  
       36 天前
    碰到这样前端确实头大
    20015jjw
        32
    20015jjw  
       36 天前 via iPhone
    动态改名字是什么脑瘫操作
    IvanLi127
        33
    IvanLi127  
       36 天前
    安卓应该起一个新的后端服务做中间层代理服务,把数据重新序列化成数组格式,然后给运维部署到服务器上,然后再继续开发。
    sampeng
        34
    sampeng  
       36 天前
    不是技术问题。。。谁发飙谁去找产品说去。。关你啥事。。
    billbob
        35
    billbob  
       36 天前
    json 啊,转成 map 对象,java 要放飞还不简单,而且 android 里面各种序列化,比 JS 还多.

    spring 都支持 map 接参,只要不想后期维护,就用各种泛型接.

    前端有动态表单,我们有泛型接参就这么简单,逻辑都不用后台处理
    hm279
        36
    hm279  
       36 天前
    需求变动,给出修改时间,延迟上线,把锅甩回去给产品啊
    jingrui
        37
    jingrui  
       36 天前
    很多 javaer 只知道参数是 object ,不会处理 map 对象,菜
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5888 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:09 · PVG 10:09 · LAX 19:09 · JFK 22:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.