• 请不要在回答技术问题时复制粘贴 AI 生成的内容
red13
V2EX  ›  程序员

你们在设计 restful api 时会用 put 和 delete 吗?

  •  
  •   red13 · Aug 15, 2025 · 13408 views
    This topic created in 444 days ago, the information mentioned may be changed or developed.

    我一直用 get 和 post ,完全可以满足需求,我不知道是否有业务场景是使用 put 和 delete 会带来好处的,我能想到的就是可以一眼看出接口的作用是什么。使用 put 和 delete 在功能性、安全性、性能上能带来好处吗?

    120 replies  •  2025-08-16 13:03:09 +08:00
    1  2  
    ❮ ❯
    seedhk
    seedhk
    Aug 15, 2025
    1
    刚毕业那几年会,PUT DELETE POST GET 分的清清楚楚。现在直接 GET POST 一把嗦
    momo2789
    momo2789
    Aug 15, 2025❤️30
    2
    首先 RESTful 约定 URL 表示资源(名词),HTTP Method 表示动作(动词)。所以 post /deleteUser 这种 URL 其实把“动词”塞进了路径,不算是纯正的 RESTful 风格。

    功能性上来讲假如上了一定规模,需要用上 API Gateway 。使用标准方法可以让它们自动识别请求意图,从而自动启用缓存、权限、幂等、限流等功能。全用 POST ,那么安全审核无法直接区分这个 POST 是“新增”还是“删除”,只能靠解析 URL 或 Body ,这样更复杂印象性能且容易漏。

    RESTful 不是强制约束,也没有标准。所以找到一个符合公司团队都能一致接受就都可以。当然我还是更推荐使用 PUT 和 DELETE ,可以少走一些弯路。
    BlueSkyXN
    BlueSkyXN
    Aug 15, 2025 via iPhone
    3
    一般不会
    maocat
    maocat
    Aug 15, 2025 via Android
    4
    直接 post 一把梭哈
    jwk345
    jwk345
    Aug 15, 2025❤️4
    5
    国内好多政企部署要求禁用 PUT 、DELETE
    Leeeeex
    Leeeeex
    Aug 15, 2025 via iPhone
    6
    我们公司的项目在最早的开发手上做过 put 和 delete ,但是后来就没人写了,在搜接口的时候同一个接口出来好几个,第一次看的时候还好奇为啥几个接口名一样项目没报错。
    接口名字做好语义化就行了,不需要写固定的方法名
    BernieDu
    BernieDu
    Aug 15, 2025
    7
    https://app.swaggerhub.com/apis/portainer/portainer-ee/2.19.3#/ 这是 portainer api ,/custom_templates/{id} 同时有 get , put , delete, 这种场景蛮多的,对服务端来说不用命三个名,对客户端来说一看就知道啥意思,封装方法的时候好封,大家都开心。 单纯满足需求的话 get 和 post 肯定是能满足
    flytsuki
    flytsuki
    Aug 15, 2025
    8
    会用,但项目刚上线接口容易调不通 最好还是只用 get 和 post
    izneogoud
    izneogoud
    Aug 15, 2025
    9
    产生新内容时用 post ,幂等的更新操作时用 put 。
    EastLord
    EastLord
    Aug 15, 2025 via iPhone
    10
    项目里没用,所以我也不用
    loading
    loading
    Aug 15, 2025
    11
    如果写下一个,我准备都用 POST ,GET 也不用了。
    EAX1
    EAX1
    Aug 15, 2025❤️1
    12
    之前出过好几个与 PUT 相关的安全漏洞,如 tomcat 的 CVE-2017-12615 和 IIS 的 Webdav 漏洞。
    虽说这更多还是应用程序设计的问题,但搞的安全人员有点 PTSD 。水平较差的漏洞扫描器或者入侵检测设备,看到 PUT 就喜欢报安全问题。
    因而会有一刀切要求禁用 PUT 的情况。
    irisdev
    irisdev
    Aug 15, 2025
    13
    运维和信息安全不让用
    dcsuibian
    dcsuibian
    Aug 15, 2025
    14
    PUT 很少用,一般是用 PATCH ,DELETE 肯定很常用了
    我挺喜欢 RESTful 的,一般能用 RESTful 的地方我都要 RESTful 。不过自己对 RESTful 的理解也是慢慢加深的,所以也不敢说接口很 RESTful
    本质上来说,他这个东西省的就是沟通成本,很清晰
    不用 RESTful 当然可以,但是目前没有更好或者平替的方案
    MonkeyJon
    MonkeyJon
    Aug 15, 2025
    15

    问就是全上
    jiangzhexin
    jiangzhexin
    Aug 15, 2025 via Android
    16
    @izneogoud 更新内容有 patch method
    ryan961
    ryan961
    Aug 15, 2025
    17
    post 一把梭。对大家都好
    nekoneko
    nekoneko
    Aug 15, 2025
    18
    都用, delete 用来删除, put 用来完全更新, patch 用来部分更新
    lxh0412
    lxh0412
    Aug 15, 2025❤️1
    19
    get post 就好啦,为啥要给自己找事呢
    so2back
    so2back
    Aug 15, 2025
    20
    post 一把梭,感觉没必要讲究那么多
    EricYuan1
    EricYuan1
    Aug 15, 2025
    21
    @jamesxu 为啥啊
    caiqichang
    caiqichang
    Aug 15, 2025
    22
    put delete 比 restful 诞生得早,restful 是给 put delete 强加概念
    Configuration
    Configuration
    Aug 15, 2025❤️1
    23
    POST /orders orders#create
    GET /orders/:id orders#show
    PATCH /orders/:id orders#update
    PUT /orders/:id orders#update
    DELETE /orders/:id orders#destroy

    用啊
    nanpu
    nanpu
    Aug 15, 2025
    24
    用啊,
    ala2008
    ala2008
    Aug 15, 2025
    25
    安全检测不能使用
    pyyalt
    pyyalt
    Aug 15, 2025
    26
    确实 一般很难做到 所有方法都用到,一般都是怎么方便怎么来。我司是随便用。😄
    jeesk
    jeesk
    Aug 15, 2025
    27
    看情况, 如果用 grpc 就是一把梭子。 如果用 http 只用 get /post . 方便测试开发。
    xiangyuecn
    xiangyuecn
    Aug 15, 2025
    28
    脑子不好使 restful
    脑子好使点 get post
    自己说了算 post
    xiejay97
    xiejay97
    Aug 15, 2025
    29
    以前分,现在全是 post ,约定 api 命名规则
    gotonull
    gotonull
    Aug 15, 2025
    30
    我们做 toB 项目的用 delete 过不了人家的安全扫描。现在全是 get 、post 一把梭
    K753255157
    K753255157
    Aug 15, 2025
    31
    我愿称之为,纯粹没事找事
    S1ahs3r
    S1ahs3r
    Aug 15, 2025
    32
    会有 REST 警察出没的。
    arsenal4
    arsenal4
    Aug 15, 2025
    33
    单一资源还好,我想问一下嵌套资源的最佳实践是什么?如获取客户的订单
    1 、/customer/{customer_id}/orders:如果用这种接口写在哪个控制器里,返回结果是直接返回订单数组还是先返回客户信息,再套订单数组。如果是后者分页怎么搞?
    2 、/orders?customer_id=xxx:上面的方式要查询所有客户的订单好像也没那么方便,所以用这种好像更方便

    似乎看起来第一种形式更符合语义但是有不方便的地方,第二种更方便。哪一种算更符合标准 Restful 呢?
    kuaner
    kuaner
    Aug 15, 2025
    34
    不会用,很多神奇的 waf 会禁用
    xiejay97
    xiejay97
    Aug 15, 2025
    35
    @arsenal4 如果是我设计,应该是 /orders/list ,customer_id 作为查询参数
    94
    94
    Aug 15, 2025
    36
    全部都用 POST 也可以实现全部的业务需求。那么为什么还要多一个 GET 呢,有什么好处吗?自己回答一下就知道了。
    i8086
    i8086
    Aug 15, 2025❤️1
    37
    经过 nn 个项目的经验,最兼容的方式全部用 POST 。
    ms17010
    ms17010
    Aug 15, 2025
    38
    会用,不过可能其他地方某些无脑一刀切的 WAF 和运维安全人员会封 PUT 、DELETE
    MoozLee
    MoozLee
    Aug 15, 2025
    39
    不用,我们公司的安全检测会报“ 检测到目标服务器启用了 OPTIONS 方法”的风险提示。只能微笑.jpg 了
    Narcissu5
    Narcissu5
    Aug 15, 2025
    40
    现在好多人设计的 restful 接口一股 web service 的味道,完全没有意识到当年 web service 是怎么死的。。
    另外一个更严重的问题是很多所谓的 restful 接口不用 http 状态码表示错误,而是把错误放在消息体里面,消息体可能还不标准,一会儿`code`一会儿`errorCode`的,结果就是完全没法做监控,系统早就挂了后端还感觉良好。
    Reficul
    Reficul
    Aug 15, 2025
    41
    说服对方,不如远离对方。 年纪大了,爱咋咋滴吧。
    chawuchiren
    chawuchiren
    Aug 15, 2025
    42
    以前会,现在全部 POST ,并且只有 httpcode 200
    wenkgin
    wenkgin
    Aug 15, 2025
    43
    我以前的同事项目用了 get 、post ,就搁那天天 restful 接口、restful 接口,我都 webapi 就 webapi 嘛 偏要叫 restful 显得高级。
    我觉得 restful 接口挺好的 规范!虽然现在很多都是通过权限去限制接口,但是没有 delete 、put 分的细且更直观。
    0754
    0754
    Aug 15, 2025
    44
    以前用,现在全部 post~~~
    HolmLoh
    HolmLoh
    Aug 15, 2025
    45
    用 patch 有时候前端又说用不了
    用 get 做 feign 的 API 又反馈说 query parameter 超出系统限制长度,要改配置文件不愿意改,又有时候说团队规定的 LocalDateTime 格式跟 feign 自带的格式不匹配,用不了 @JsonFormat 转
    反正一堆乱七八糟的问题吧,想要定义优雅的接口变成了自寻烦恼,现在已经经历了好多个项目了,不想用了,接下来全用 POST 算了
    infreboot
    infreboot
    Aug 15, 2025
    46
    restful 最傻逼的地方就是 路由上有参数,body 里也有参数。
    特别是业务复杂了,路由长的一批
    HetFrame
    HetFrame
    Aug 15, 2025
    47
    用 method 区分的话,全局搜一个接口结果搜出来多个,还得一个一个看 method
    GuluMashimaro
    GuluMashimaro
    Aug 15, 2025
    48
    @jamesxu 因为有的漏洞扫描软件会报这是漏洞
    nivalxer
    nivalxer
    Aug 15, 2025
    49
    最早是强制要求,严格区分
    后面在某些项目上某些态势感知和防火墙会识别为是异常请求直接中断,找客户联合厂家沟通又是半天
    现在基本没强制要求了
    adzchao
    adzchao
    Aug 15, 2025
    50
    现在 put 都少了,如果是全量更新才会用 put ,部分更新使用的是 patch
    hyqCrystal
    hyqCrystal
    Aug 15, 2025
    51
    不好用 就不用了
    SoloKing
    SoloKing
    Aug 15, 2025
    52
    阿里云 CND 不支持 delete 和 patch ,DCDN 才支持,有时候想用也不行
    wk8023
    wk8023
    Aug 15, 2025
    53
    不用 put 和 delete ,就不是 RESTful ,就是普通的 rpc 风格
    way2create
    way2create
    Aug 15, 2025
    54
    一般不用,没完全遵循 restful api ,直接 get post 一把梭,用地址去体现操作,不过我无所谓的,随便,只要结合应用场景有一套合理的规范即可,别跟我遇到的某些傻 x 一样把不同语言的规范直接套到别的语言或数据库甚至还自己造个框架难用的要死自我陶醉就行
    crazycloudccc
    crazycloudccc
    Aug 15, 2025
    55
    线上 post, 调试 get;
    主要是图个好记;
    JoeDH
    JoeDH
    Aug 15, 2025
    56
    懒得用 我看个方法直接看 Url 就能知道他大致做什么 如果用上了还得瞟一眼 method 来区分同路径的 url 真费劲 纯粹给自己找事
    since1997
    since1997
    Aug 15, 2025
    57
    @jamesxu indeed
    joooooker21
    joooooker21
    Aug 15, 2025
    58
    下一个准备只用 POST
    QlanQ
    QlanQ
    Aug 15, 2025
    59
    主要是 命名困难,所以用了 restful
    但是 在查询 列表,比如 查询所有的 orders 的时候,按理说应该用 get 表示获取
    但是如果有很多查询条件,又觉得 在 url 太难看,太长,而且还有可能参数数 数组或者有其他的符号,就感觉 get 不行
    所以 我一般 get orders 这种,都会改成 post /order/search ,post /order 创建
    jwk345
    jwk345
    Aug 15, 2025
    60
    sam2478
    sam2478
    Aug 15, 2025
    61
    个人觉得 put, delete 更优雅一点,Apple Ads Api 也是这样的
    skallz
    skallz
    Aug 15, 2025
    62
    对外的接口一般就 get 和 post ,甚至只用 post ,因为 put 和 del 接口别人不一定能对接,不要给自己找麻烦,自己项目内部使用的话就随便了,反正五花八门的团队标准都见过
    ljkgpxs
    ljkgpxs
    Aug 15, 2025
    63
    POST 一把梭哈,功能用 url 区分
    jsq2627
    jsq2627
    PRO
    Aug 15, 2025
    64
    刚毕业的时候会。现在见的项目多了,国内外都有,聪明和傻比的程序员也都合作过不少,最明智做法是 GET/POST 一把梭,沟通成本最低,出问题概率最低。
    yibo2018
    yibo2018
    Aug 15, 2025
    65
    已经有大半年没写过这些细节了,AI 想怎么写都行
    flybluewolf
    flybluewolf
    Aug 15, 2025
    66
    按照楼主的说法,post 也完全可以不用,所有 get 一把梭....
    love2328
    love2328
    Aug 15, 2025
    67
    直接 post 一把梭哈 , 特别自己的项目
    y1y1
    y1y1
    Aug 15, 2025
    68
    restful 不就是要用 method 作为语义的一部分么
    pingdog
    pingdog
    Aug 15, 2025 via Android
    69
    我大清自有国情在此,不面向锅内的业务才能用除 get post 以外的 method ,抓你做等保的时候,你在全量改 API ?黑皮只认为 get post 才是安全 method ,其它都什么牛鬼蛇神
    yuyanggongzi
    yuyanggongzi
    Aug 15, 2025
    70
    一般就用 get post delete
    AX5N
    AX5N
    Aug 15, 2025
    71
    @flybluewolf 百度还真就是这样,直接把 json 写在 url 里。
    aababc
    aababc
    Aug 15, 2025❤️1
    72
    感觉这种帖子没啥意义,有喜欢 restful 的,有喜欢 rpc 的,有喜欢 graphql 的,最终讨论不出来个啥,自己权衡利弊之后,选择一个比较适合自己场景的,然后制定好各种规范就 OK 了
    aababc
    aababc
    Aug 15, 2025
    73
    @QlanQ #59 好像最近出了一个规范添加了一个 Query Method 来解决这个问题
    runliuv
    runliuv
    Aug 15, 2025
    74
    @seedhk 优秀
    kakki
    kakki
    Aug 15, 2025
    75
    这个只是风格问题,没有高下之分吧,除了那些搞什么网安的强制外,爱用什么用什么.只是各种接口管理工具五颜六色好看,那必须全用起来.
    Dogtler
    Dogtler
    Aug 15, 2025
    76
    不用 put get delete post 对资源进行操作的接口能被叫做 restful 么??? 但是据我观察,好像还有另外的解释?
    Kumo31
    Kumo31
    Aug 15, 2025
    77
    只用 PATCH ,不用 PUT 。严格来说我们用的也是不是标准的 RESTful ,是 Google Cloud 的标准: https://google.aip.dev/
    malzahar
    malzahar
    Aug 15, 2025❤️1
    78
    如果是自己的服务,那随便怎么搞都行。如果是公司的,我建议你按标准来。

    虽然看起来没啥区别,但是不标准的接口对你的下游简直是灾难。

    如果是标准 restful ,API 网关,metrics ,tracing 等等其他系统都可以无缝衔接,否则就要为你单独适配了,这种工作就是不做不行,做了纯属浪费时间。
    作为 SRE ,我提供给别人的接口都是标准 restful ,谁给我不标准的我就喷谁
    SchwarzeR
    SchwarzeR
    Aug 15, 2025
    79
    直接全 post ,方便规范 cover 团队能力最下限的人。
    另外除了 get 和 post 的外的请求有被某些脑瘫上古运维和安全系统 ban 掉的风险 [我还见过会 ban http2.0 的
    clarkethan
    clarkethan
    Aug 15, 2025
    80
    如果下游没有要求,目前倾向于 get+post 一把梭,符合中国国情
    leeg810312
    leeg810312
    Aug 15, 2025
    81
    azure/aws 这些云服务的 rest api 都是这么设计的呀,我也遵循这样的规范,在公司做项目的时候就是这么用的
    niceyoo
    niceyoo
    Aug 15, 2025
    82
    项目的生产环境直接把 delete 、put 请求方式禁了,只能 post 、get 一把梭
    SanjinGG
    SanjinGG
    Aug 15, 2025
    83
    自己写基本是怎么规范怎么来,公司项目后端用什么就用什么
    leeg810312
    leeg810312
    Aug 15, 2025
    84
    我遵循 restful 规范做不同业务系统给十几个外资大企业用,它们用不同的安全扫描软件,但都没有说这个有问题。我知道政府国企限于它们的 IT 管理能力,这些机构项目可能不行,但给其他企业用说安全扫描不允许,表示非常怀疑什么安全扫描会扫出来认为这个有问题。
    akakidz
    akakidz
    Aug 15, 2025
    85
    政府类项目,只能用 post/get
    SynchronizedLock
    SynchronizedLock
    Aug 15, 2025
    86
    @EastLord 是没地方 CTRL C 吗
    fionasit007
    fionasit007
    Aug 15, 2025
    87
    @jamesxu #5 之前 oss 没关 put 被网管通知过
    ychost
    ychost
    Aug 15, 2025
    88
    @seedhk 真实,有时候 GET 都不想用了,参数嵌套了还得 POST 好使
    fuchish112
    fuchish112
    Aug 15, 2025
    89
    全部 post
    Pantheoon
    Pantheoon
    Aug 15, 2025
    90
    跑起来就完了 整那么多事 都用 post
    jackOff
    jackOff
    Aug 15, 2025
    91
    post 一把梭
    BQsummer
    BQsummer
    Aug 15, 2025
    92
    虽然我也喜欢用 restful ,但是我是做监控的,你 url 不一样,我怎么把指标聚合,纯数字还好,英文混数字的,根本没法识别
    FinnBai
    FinnBai
    Aug 15, 2025
    93
    怀念啊,曾经的月经贴,现在一年都看不到一个了

    其实 RESTful 主要是大家有一个统一的描述接口的规范,比如接口的安全性,幂等性,用不用取决于涉及到的团队开发人员以及项目使用的相关 web 组件
    spike0100
    spike0100
    Aug 15, 2025
    94
    get+post 。其他的用的少
    EastLord
    EastLord
    Aug 15, 2025
    95
    @SynchronizedLock 为了与项目代码风格保持一致
    Ketteiron
    Ketteiron
    Aug 15, 2025
    96
    全用 post 。
    现实是复杂的,RESTful 的表达能力不足以覆盖所有 case ,强行使用统一约定会让一些简单的东西变得难以理解。
    2#说 `全用 POST ,那么安全审核无法直接区分这个 POST 是“新增”还是“删除”,只能靠解析 URL 或 Body ,这样更复杂印象性能且容易漏。`
    为什么要区分是新增还是删除,而且一个接口本来就可以删除一些 A ,新增一些 B ,修改一些 C 。
    真正的安全策略应该基于权限规则和业务逻辑,不应该简单地基于约定式的 Method ,它本质上和 /add /edit /del /info /page 一模一样,能严格遵守 RESTful 标准的人,同样能遵守自定义的语义要求。
    我一直觉得接口的语义化完全没必要,一个硬编码玩出花来有什么意义,只要把代码给组织好就足够了。
    Oktfolio
    Oktfolio
    Aug 15, 2025
    97
    很少有全量更新的场景,所以不怎么用 PUT 。用 PATCH + Json Patch ,不然就是 POST /resources/{id}:action 这种设计。
    kinkin666
    kinkin666
    Aug 15, 2025
    98
    后端服务,post 一把梭哈,而且有时候还有超接口,里面就俩字段 method 和 payload ,可扩展性 max
    nexo
    nexo
    Aug 15, 2025
    99
    你这题目就是个悖论 如果你遵循 restful 风格就得用 put 而且你问出这个问题就说明了你不懂 restful
    illiteracy0001
    illiteracy0001
    Aug 15, 2025
    100
    标准是标准,真用起来就会发现各种问题,完全的资源抽象有一定的难度、前端也不一定愿意配合
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3878 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 168ms · UTC 00:08 · PVG 08:08 · LAX 16:08 · JFK 19:08
    ♥ Do have faith in what you're doing.