关于前端传参问题: formData 和 json 两者有什么优劣吗?或者说存在决定性优势 - V2EX
a7217107
V2EX    Java

关于前端传参问题: formData 和 json 两者有什么优劣吗?或者说存在决定性优势

  •  2
     
  •   a7217107 Oct 14, 2019 20067 views
    This topic created in 2401 days ago, the information mentioned may be changed or developed.

    前两天根据项目后端接参问题跟同事讨论,既有 formData 又有 json,比较混乱。我的观点是 json 对于接复杂对象比较方便,formdata 需要 String 转成对象,同时参考了一些开源项目,请求封装默认的是 json 格式。同事认为,请求方式只是一种跟前端的约定,json 格式 postman 自测太麻烦,绝大多数接口 formData,遇到复杂格式的 json 接参或者 String 转对象。

    34 replies    2019-10-15 11:05:43 +08:00
    murmur
        1
    murmur  
       Oct 14, 2019   1
    json 格式 postman 怎么麻烦了,直接写到 body 里,加个 type 头就完了
    a62527776a
        2
    a62527776a  
       Oct 14, 2019
    我们公司后端也是一会儿一种 烦死了
    shakaraka
        3
    shakaraka  
    PRO
       Oct 14, 2019
    前端完全抛弃 formData 是可行的,只不过大多数后端框架自带了 formData 解析相对方便而已,其实是有 json 的传入参数校验之类的,class-validator 就是,只不过他们懒得。。。
    liuhuansir
        4
    liuhuansir  
       Oct 14, 2019
    感觉两者区别不大,只要统一成一种就行,两种混搭最烦
    droiz
        5
    droiz  
       Oct 14, 2019 via iPhone
    不涉及上传文件那随便,上传文件还是得 formData
    arrow8899
        6
    arrow8899  
       Oct 14, 2019
    form-data 和 json 在表示同样的信息时,form-data 数据量会小一点(a=1&b=2) 7Byte,但是 json 可读性更好({"a":1,"b":2}) 13Byte。除此之外,区别不大,只要前后端约定好就行。
    userdhf
        7
    userdhf  
       Oct 14, 2019
    post 只能用 formdata 吗?
    zivyou
        8
    zivyou  
       Oct 14, 2019
    上传文件只能用 form-data
    Vegetable
        9
    Vegetable  
       Oct 14, 2019
    主要是 form 传递二进制比较方便,不然可以完全舍弃。json 上传文件不是很合适。
    hmxxmh
        10
    hmxxmh  
       Oct 14, 2019 via Android
    @murmur 哈哈,可能他没试过
    Sapp
        11
    Sapp  
       Oct 14, 2019
    现在不是只有上传文件才用 form-data 吗?
    Kusoku
        12
    Kusoku  
       Oct 14, 2019
    postman 自测真的不麻烦啊
    Chingim
        13
    Chingim  
       Oct 14, 2019
    用 json, 便于调试 /抓包 /debug
    harde
        14
    harde  
       Oct 14, 2019
    后端偷懒了,我设计接口都是兼容 formData 与 json 的。
    barbery
        15
    barbery  
       Oct 14, 2019
    formData 只能是传递 string 格式的参数,类似 go 这类的静态语言,如果传 json 的话可以省下不少类型转换的麻烦
    maemual
        16
    maemual  
       Oct 14, 2019
    差别不大,统一成一种就行。。。
    KuroNekoFan
        17
    KuroNekoFan  
       Oct 14, 2019
    你指的 formdata,是 application/x-www-form-urlencoded 吧
    Krime
        18
    Krime  
       Oct 14, 2019
    formData 传数组和多维数据的时候比较捉急,但是更适合上传文件
    ijse
        19
    ijse  
       Oct 14, 2019
    formdata 对数组的编码方式还有很多种方式,常常会因为不统一引起麻烦,不如 json 更标准
    ipwx
        20
    ipwx  
       Oct 14, 2019 via Android
    对象一复杂,formdata 你就哭吧
    wisetc
        21
    wisetc  
       Oct 14, 2019 via iPhone
    不是两种方式都应该同时支持吗,任意调用者用着舒服就用哪种,现在大部分都支持 raw json contentType 吧。
    optional
        22
    optional  
       Oct 14, 2019 via iPhone
    前者可以传文件,后者保持结构和类型
    walpurgis
        23
    walpurgis  
       Oct 14, 2019
    Content-Type 是 json 的时候,cors 会多触发一次预检请求
    mmnsghgn
        24
    mmnsghgn  
       Oct 14, 2019
    @walpurgis 你指的是 options 方法吗,应该跟 Content-Type 没关系吧?
    lihongjie0209
        25
    lihongjie0209  
       Oct 14, 2019
    @harde #14 这个问题基本和开发无关, 取决你的用的 mvc 框架是否支持。
    jorneyr
        26
    jorneyr  
       Oct 14, 2019
    FormData 方便 XSS 过滤,但是传复杂对象 (多级属性) 麻烦
    JSON 传复杂对象方便,但是 XSS 过滤麻烦
    harde
        27
    harde  
       Oct 14, 2019
    @lihongjie0209 框架不支持就不能自己写了?写个过滤器一劳永逸。
    lihongjie0209
        28
    lihongjie0209  
       Oct 14, 2019
    @harde #27 那么你还需要定义一套 formdata 字段解析的规则 ?

    类似于 reqObject[listField][index_1][objectfield] = 1 ?? 这样的?
    AV1
        29
    AV1  
       Oct 14, 2019 via Android
    FormData 传简单的 key-value 挺方便的,但是嵌套对象、数组就比较麻烦了。所以要根据你的情况考虑选择。
    mmrx
        30
    mmrx  
       Oct 14, 2019   1
    有必要统一么,我前后端客户端都写,参数简单就用 FromData,复杂参数就用 Json 格式传参
    根据实际情况选用就好了,或者有偏好+自己可以决定用什么格式的话,想用什么格式用什么格式
    否则,还是看清接口文档,参数格式到底是啥,反正也没有决定权...
    jzmws
        31
    jzmws  
       Oct 14, 2019
    @harde 这么写的 ? 有例子不 ?
    adimn
        32
    adimn  
       Oct 14, 2019 via Android   2
    传什么都好,别再给我传 undefined 了,脑壳疼
    Takamine
        33
    Takamine  
       Oct 15, 2019 via Android
    还是除了文件上传之外统一 json 吧。
    SkyLine7
        34
    SkyLine7  
       Oct 15, 2019
    文件上传,formData,其他一律 json 或者 urlencoding
    About     Help     Advertise     Blog     API     FAQ     Solana     977 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 100ms UTC 22:00 PVG 06:00 LAX 1:00 JFK 18:00
    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