你有没有特别想吐槽的后端接口? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zjiecode
V2EX    程序员

你有没有特别想吐槽的后端接口?

  •  
  •   zjiecode 2020-01-04 11:05:58 +08:00 7251 次点击
    这是一个创建于 2108 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道各位的公司,后端接口有没有一些规范?

    我之前遇到一个后端 RD,定义 GET 请求,但是,需要在 body 里面添加数据,感觉特别怪异?这种为啥不直接用 post,各位觉得呢?

    50 条回复    2020-01-06 16:12:02 +08:00
    Pastsong
        1
    Pastsong  
       2020-01-04 11:09:14 +08:00 via Android
    get 传 body 是未定义行为,很多服务器是直接扔掉的
    a1056151086
        2
    a1056151086  
       2020-01-04 11:11:06 +08:00 via Android
    我以前试过前端 get 传 body 好像后端会报错还是接收不到的吧?
    loading
        3
    loading  
       2020-01-04 11:26:52 +08:00
    如果还没开发,按 restful api 进行一般性规范还是可以的,可以参考一下。
    对于已经开发完毕,或者第三方的,只要有文档都可以的,没什么问题。
    sgiyy
        4
    sgiyy  
       2020-01-04 11:52:07 +08:00
    今年最想吐槽的是,我跟后端说保存数据和修改的时候咱们用 post 传递数据,然而一个 team 里 4 个后端都来跟我说 POST 怎么拿不到数据,我还搜索了一下 Java 例子发给他们,合着他们一直就会用 GET 啊 。
    wangyzj
        5
    wangyzj  
       2020-01-04 12:21:05 +08:00
    感觉一种一类迷糊加密行为呢
    viator42
        6
    viator42  
       2020-01-04 12:35:55 +08:00 via Android
    性别用布尔值,肯定不对但常识上来说又没有什么不对
    rainbowchou
        7
    rainbowchou  
       2020-01-04 12:49:46 +08:00
    如果只对接自己的服务器处理貌似没什么问题

    不过这么基础的东西都要乱来,是不是真不懂?
    wysnylc
        8
    wysnylc  
       2020-01-04 13:33:17 +08:00
    @viator42 #6 任何时候都不要用布尔,因为经常会让你在 if else 里加 else if,写成 1,2,3 扩展性强
    jss
        9
    jss  
       2020-01-04 14:11:16 +08:00 via iPhone
    @viator42 性别用布尔 第一次听说 那保密该选啥?
    xfspace
        10
    xfspace  
       2020-01-04 14:15:45 +08:00 via Android
    @jss null
    dr1q65MfKFKHnJr6
        11
    dr1q65MfKFKHnJr6  
       2020-01-04 14:21:39 +08:00
    @jss 保密是系统定义的控制的安全行为,po -> vo 转换过程中控制。
    guyeu
        12
    guyeu  
       2020-01-04 15:56:15 +08:00
    @jss #9
    @wysnylc #8
    性别应该用枚举,那是因为有可能存在男女之外的选项;

    在恰当的时候用恰当的数据类型,bool 无论如何都应该在选择范围内,那是因为很多场景下 bool 是最合适的。
    比如说开关。
    skinny
        13
    skinny  
       2020-01-04 16:02:51 +08:00
    用 GET 发送 BODY 数据的就别提规范了……
    ZXCDFGTYU
        14
    ZXCDFGTYU  
       2020-01-04 16:04:39 +08:00   2
    tt67wq
        15
    tt67wq  
       2020-01-04 16:43:10 +08:00
    你们这后端也太蔡了吧
    xjmroot
        16
    xjmroot  
       2020-01-04 16:46:00 +08:00 via iPhone
    limit 参数可以填无穷大
    EminemW
        17
    EminemW  
       2020-01-04 16:59:58 +08:00 via iPhone
    @sgiyy 你们用的 neety 吧
    autulin
        18
    autulin  
       2020-01-04 17:08:51 +08:00 via iPhone
    规范的最终目的是实现众所周知的统一,es 的 http 查询 dsl 从 body 带为什么大家不喷,只要同一个团体有一定的统一就好了
    JJstyle
        19
    JJstyle  
       2020-01-04 17:11:06 +08:00 via iPhone
    bool 看着符合语义,但是经常遇到后面要加一个值过来。
    gitJavascript
        20
    gitJavascript  
       2020-01-04 17:21:11 +08:00
    直接给后端说不就好了,post 传 query 我能忍,get 传 body 是几个意思
    hantsy
        21
    hantsy  
       2020-01-04 17:28:13 +08:00
    头一回听说用 Get Body 传数据。不讨论这个了,又是 REST 设计问题,月经了。
    xianyu0
        22
    xianyu0  
       2020-01-04 17:31:14 +08:00
    get 请求带 body,从 http 协议的角度讲,并没有不规范吧,http 没规定 get 请求不能带 body 呀。

    elasticsearch 的查询,不就是 get 请求带 body 吗?

    只不过很少这样用,而且有些软件可能不支持而已。

    当然,我是反对 get 请求带 body 的……另外,后台接口难道还限制你只能用 get ?不给用 post ?
    ceet
        23
    ceet  
       2020-01-04 17:34:30 +08:00
    查询的接口是 post。 请求的数据是 sql。直接传 sql 给后台。 后台做了过滤而已。美名曰提高效率。
    itning
        24
    itning  
       2020-01-04 18:10:39 +08:00
    @ceet 直接传 SQL ? drop table "xxx"
    xiaoyt0909
        25
    xiaoyt0909  
       2020-01-04 18:16:10 +08:00
    @xianyu0 后端接口是可以限制请求方式的,一般除了查询用 get,其它的都用 post
    cszchen
        26
    cszchen  
       2020-01-04 18:31:27 +08:00
    @ceet 能给个地址观摩一下不[邪恶]
    xianyu0
        27
    xianyu0  
       2020-01-04 18:32:04 +08:00
    @xiaoyt0909 我当然知道可以限制,我就是做后台的……我的意思是,后台的某个接口一般会同时允许 get 和 post,不会只允许 get 不允许 post,最多也只是允许 post 不允许 get (出于某些限制,比如提交数据比较多,或者不想参数出现在 url 里、等等)
    cszchen
        28
    cszchen  
       2020-01-04 18:37:22 +08:00
    @xianyu0 restful 的规范就是要么只能 get,要么只能 post,一个接口只干一件事,你全搞在一起不仅不规范,维护也难啊
    xianyu0
        29
    xianyu0  
       2020-01-04 18:49:33 +08:00
    @cszchen 一个接口同时支持 get 和 post,怎么就难维护了……后台处理请求的时候,难道会区分这个请求是 get 还是 post ?
    AlexCode
        30
    AlexCode  
       2020-01-04 19:01:51 +08:00
    @sgiyy 我猜,估计 delete、put 就更不用说了,一定没怎么用。
    zhizunzz
        31
    zhizunzz  
       2020-01-04 19:02:19 +08:00
    php 老掉牙版本 页面 input 的 name 是数字 1,2,3,后台 register_globals=on

    一脸得意的告诉我这么办$tmp="1",$var=$$tmp, 我他妈照办了
    AlexCode
        32
    AlexCode  
       2020-01-04 19:02:46 +08:00
    @viator42 性别用布尔,的确不好处理,男女可以表示,未知性别一下就蒙了
    iRiven
        33
    iRiven  
       2020-01-04 19:04:47 +08:00
    主板上面的 VGA 可以吐槽吗
    zjiecode
        34
    zjiecode  
    OP
       2020-01-04 19:07:43 +08:00
    @ZXCDFGTYU 这个感觉 ,后端的人也太业余了吧
    LinJunzhu
        35
    LinJunzhu  
       2020-01-04 19:08:46 +08:00
    @xianyu0 惊了,合着你写的 某个 API 都是同时支持 GET 和 POST 的?
    slyang5
        36
    slyang5  
       2020-01-04 20:08:25 +08:00
    @xianyu0 因为他的 get 带 body 被好多开源库吐槽了 及其不规范
    xianyu0
        37
    xianyu0  
       2020-01-04 20:42:00 +08:00
    @LinJunzhu 没错,我的绝大部分接口既允许 get,也允许 post。限制一个接口只允许 get 或只允许 post 有什么好处? query string 从 url 里取 和 从 request body 里取 有任何区别吗?
    darknoll
        38
    darknoll  
       2020-01-04 20:58:09 +08:00 via Android
    get 带 body,长见识了
    a852695
        39
    a852695  
       2020-01-04 21:41:53 +08:00
    看到过有后端传文件接口,把文件内容写 query string 的,url 直接被 ngx 拦了
    Varobjs
        40
    Varobjs  
       2020-01-04 22:00:20 +08:00
    吐槽下很多大公司的接口文档
    有的写着 GET/POST 实际只能 POST
    有的写着 返回 xx 实际从来不返回

    全靠猜
    xuanbg
        41
    xuanbg  
       2020-01-04 22:24:43 +08:00
    我司全用 POST,无他,简单。返回有统一的格式,成功取 data,失败输出 message,只有很少情况需要根据 code 处理。

    只是 url 乱七八糟的没眼看……
    dodo2012
        42
    dodo2012  
       2020-01-04 22:26:27 +08:00
    一直 rest 规范来的,可能 和用了很多年 rails 有关,习惯了
    DavidNineRoc
        43
    DavidNineRoc  
       2020-01-05 09:12:20 +08:00
    @xianyu0 当然区分,GET:/users 获取用户列表, POST:/users 创建用户 参考 RESTFul
    fewok
        44
    fewok  
       2020-01-05 11:47:05 +08:00   1
    别追着规范约定吐槽,这样仿佛前端小萌新。。。

    要从指标上吐槽
    比如:耗时好几秒的接口,居然不搞异步; TP50 和 TP90 差别这么大; QPS 超 1 就异常;接口性能不清楚就使用。
    要从数据上吐槽
    比如:几百 KB 的数据居然不 gzip 下;同一字段,即使字符串,也是对象; json 的 key 居然是变量。
    要从使用上吐槽
    比如:没有幕等;没有防重;没有鉴权;还能日常暂停使用(特指各大银行+火车)。
    Torpedo
        45
    Torpedo  
       2020-01-05 12:46:44 +08:00
    get 可以发 body,但是浏览器不支持。
    你们后端是不是直接用了 spring,方便就直接 get body 里取数据了
    luozic
        46
    luozic  
       2020-01-05 15:13:01 +08:00 via iPhone
    最基本的幂等性不支持的接口见识过没有。
    LinJunzhu
        47
    LinJunzhu  
       2020-01-05 15:19:11 +08:00
    @xianyu0 一个接口允许 GET 和 POST 有什么好处?
    FightForFreedom
        48
    FightForFreedom  
       2020-01-05 17:37:28 +08:00
    @LinJunzhu 可能是既让 restful 警察爽到,又照顾了对 rest 没啥热衷的普罗大众?
    zjiecode
        49
    zjiecode  
    OP
       2020-01-05 18:03:33 +08:00
    @DavidNineRoc 对,我也比较喜欢这种 ,DELETE:/users 删除用户, PUT:/users 修改用户
    mysunshinedreams
        50
    mysunshinedreams  
       2020-01-06 16:12:02 +08:00
    楼上的,get 为什么不能用 body,HTTP 规范并没有限制,限制的是浏览器和网关,Spring 也没有进行限制。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1080 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 17:55 PVG 01:55 LAX 10:55 JFK 13:55
    Do have faith in what you're doing.
    ubao 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