V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WytheHuang
V2EX  ›  程序员

第一次听说 PUT 请求编码方式要统一规范的

  •  
  •   WytheHuang · Feb 23, 2020 via Android · 4071 views
    This topic created in 2259 days ago, the information mentioned may be changed or developed.

    我公司需要建一个新系统(后端是 thinkphp 6),对接接口时候,前端说我接口不对,我看了一下接口和参数,发现参数不对。他请求编码方式 application/json,我的是 application/x-www-form-urlencoded 方式,我就说他参数不对,需要跟我们 ERP 系统一样,他说 erp 系统改过,他不会改,也不知道怎么改。扯来扯去,想让我来改。我当然不愿意改,那我代码自测没问题,还要我来改,最后问组长说统一规范,说以后 put 请求编码方式都用 application/json,我服了。六字真言在心中。哎

    32 replies    2020-02-23 23:25:48 +08:00
    wangcansun
        1
    wangcansun  
       Feb 23, 2020
    现在整体范围内,不是 json 才不正常吧。。。。。
    json 和前端的对象是通用的,所以 json 对前端来说更友好。
    而且现在更多地 api 服务商提供的都是 json 格式吧
    chendy
        2
    chendy  
       Feb 23, 2020   ❤️ 1
    不是 put 用 json,是全部 body 除了文件上传都 json
    毕竟 urlencoded 不好处理复杂对象和数组,就全部统一好了
    nvkou
        3
    nvkou  
       Feb 23, 2020 via Android
    编码方式…以为要说 gbk 和 utf8
    php 多半是用 curl 做客户端。post 数组会自动转换头为 form encoded。算是后端不精。
    另。put 可以有 body 的吗
    WytheHuang
        4
    WytheHuang  
    OP
       Feb 23, 2020 via Android
    @wangcansun 我能理解,问题是前端就一句话不会就让改
    nvkou
        5
    nvkou  
       Feb 23, 2020 via Android
    @nvkou 我睡傻了。以为 options 请求
    wangcansun
        6
    wangcansun  
       Feb 23, 2020
    @WytheHuang 沟通方式确实有问题,不可能说应为不会而不改。。。。别想太多了。。。。
    WytheHuang
        7
    WytheHuang  
    OP
       Feb 23, 2020 via Android
    @wangcansun 他说 erp 系统改动,不知道 erp 是如何改,让我后端按 application/json 来。这一点是我不爽的点。
    ss098
        8
    ss098  
       Feb 23, 2020
    根据你的描述如果前后端分离的话,使用 application/json 是很合理的。
    G2bN4dbX9J3ncp0r
        9
    G2bN4dbX9J3ncp0r  
       Feb 23, 2020
    rails 来说, 不管 application/json 还是 application/x-www-form-urlencoded 都没框架抽象来

    比如直接用 params[:name] 就行

    别用 thinkphp 了
    lihongming
        10
    lihongming  
       Feb 23, 2020 via iPhone
    说参数不对没问题啊,form 方式你收到的是一个数组,各“参数”都都给你分好了。而 json 方式整个 body 都是数据,你自己从 json 对象里找数据,总共就一个“参数”
    nvkou
        11
    nvkou  
       Feb 23, 2020 via Android
    @lidashuang 这个真的要说,对接很多国内公司文档都只说一个 post 根本不提 content type。可现实是 Apache 或 nginx 等很多反代因为安全设置是限制 content type 的。直接 401 比走业务快。
    Reficul
        12
    Reficul  
       Feb 23, 2020 via Android
    按规范来,前端请求里 allow 什么后端返回其中格式的内容,保持头和内容一致。
    sujin190
        13
    sujin190  
       Feb 23, 2020
    既然如此,为啥不能按 content-type 来解码,前端爱用啥用啥呗,http 都给你定义好了,没必要纠结吧
    Muninn
        14
    Muninn  
       Feb 23, 2020
    这个问题竟然是一个后端提出的……

    难道不是平时都是前端不理解为啥要用 json 去 put 和 post 么……很多框架默认的都不是 json 要加一行 content type

    可能 php 是世界上最好的语言吧
    manami
        15
    manami  
       Feb 23, 2020 via Android
    我站 application/json
    blless
        16
    blless  
       Feb 23, 2020 via Android
    我司都是 json,每个系统都是。除非外部系统,听起来你们 ERP 也是第三方系统,主动适配是应该的。
    binux
        17
    binux  
       Feb 23, 2020
    是你的问题
    sadfQED2
        18
    sadfQED2  
       Feb 23, 2020
    我觉得吧,讲道理,application/json 比较合理
    cloudzhou
        19
    cloudzhou  
       Feb 23, 2020
    application/json 的表现力,比 application/x-www-form-urlencoded 多多了,尤其是层级多的情况下

    如果是文本为主,我赞同你组长的统一规范
    sagaxu
        20
    sagaxu  
       Feb 23, 2020 via Android
    tp 用户果然都一样
    looplj
        21
    looplj  
       Feb 23, 2020
    put 不是用 json+body 吗。
    现在主要用的 rest 是这样的。
    看看 stripe 的 API 设计,其实 RESTful 的表达能力已经足够了。
    lkxjlkejwr
        22
    lkxjlkejwr  
       Feb 23, 2020   ❤️ 1
    看之前习惯和文档情况或者之前项目、公司内部规定了都走 json 就是 json。不然前端随心所欲写个 content-type 然后传个对应的 body 不是给后端徒增麻烦,和什么语言什么框架有什么关系。根本不是 php 还是 thinkphp 能不能解析的问题,反过来说,后端也别返回 json 了,直接 content-type 写个 text/html,body 里搞成 string 就完了。
    WytheHuang
        23
    WytheHuang  
    OP
       Feb 23, 2020
    ERP 系统项目是用 application/x-www-form-urlencoded, 新项目并没有一开始说要用 application/json, 而是前端对于 ERP 项目用 application/x-www-form-urlencoded 不知道,但他觉得太复杂了,不会改。于是让我来改,最后居然说统一规范。用那个我都可以,问题是由于他的不会,强行规范这一点是我无法忍受的。
    TristanYang
        24
    TristanYang  
       Feb 23, 2020
    除了文件上传,application/json 优先,前端怼的对。
    zjie
        25
    zjie  
       Feb 23, 2020
    讲道理,除了文件上传 ,body 里面放 application/json 更好处理,也更加主流。最近几年的系统,应该都是这种格式吧。
    lkxjlkejwr
        26
    lkxjlkejwr  
       Feb 23, 2020
    @WytheHuang tp 作为一个成熟的框架 tp5 遵循 psr7 之后支持 application/json 应该就就是分分钟的事情。tp6 虽然没有了解过 但是估计最差的情况下就是写一个 middleware 复制一遍就好了。

    我猜测你早期的 erp 用的是 jq 所以 $.ajax 默认是 application/x-www-form-urlencoded 格式 现在新项目可能改用 vue 之类的像 axios 包所以默认都是用 json。 换的话他们转一下 data 格式 但是 object.assign 函数不兼容 iOS10 以下的老浏览器 所以就比较麻烦 (我不怎么会前端仅是猜测可能不对)

    后端至少在项目范围内肯定要一个统一的格式这个是肯定的,其次 application/json 应该来说是默认的一个比较标准的格式 无论怎么说后端在 restful 的情况下弄成不支持 json 的确是一大失误。
    WytheHuang
        27
    WytheHuang  
    OP
       Feb 23, 2020
    @TristanYang #23 你看了全文吗,是他不会,而去统一
    liukanshan
        28
    liukanshan  
       Feb 23, 2020   ❤️ 1
    不论对错 你同事的态度应该有问题 引起你的不适。
    wangyzj
        29
    wangyzj  
       Feb 23, 2020
    这可能是历史遗留问题把
    但我觉得还是 json 类型比较好
    我建议方向还是改成 json
    如果一次性都改不现实的话就分批改
    或者做个中间层
    MzM2ODkx
        30
    MzM2ODkx  
       Feb 23, 2020
    沟通下统一了改下不就得了,就这也值得抱怨?同事之间关系这么差?
    msg7086
        31
    msg7086  
       Feb 23, 2020
    Rails 开发人员表示 JSON 和 urlencoded 和 multipart 对我来说都一样……
    qile1
        32
    qile1  
       Feb 23, 2020 via Android
    datatable 里面读取数据是 steam 模式,要不数据不显示
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2419 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 11:45 · PVG 19:45 · LAX 04:45 · JFK 07:45
    ♥ Do have faith in what you're doing.