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

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

  •  
  •   zjsxwc ·
    zjsxwc · 10 小时 41 分钟前 · 1896 次点击
    因为产品需求变动,又急着上线,于是接口参数变成动态数量,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    前端有动态表单,我们有泛型接参就这么简单,逻辑都不用后台处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3412 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:33 · PVG 19:33 · LAX 03:33 · JFK 06:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.