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

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

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

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

    我之前遇到一个后端 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
    cedoo22
        11
    cedoo22  
       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   ·   实用小工具   ·   3034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:42 · PVG 21:42 · LAX 05:42 · JFK 08:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.