为何国内的大厂没有使用 RESTful 接口规范 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dedemao
V2EX    问与答

为何国内的大厂没有使用 RESTful 接口规范

  •  2
     
  •   dedemao 2021-05-16 20:09:44 +08:00 4680 次点击
    这是一个创建于 1608 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了支付宝、微信公众号、钉钉、抖音等开放平台的接口文档,无一例外,都没有使用 RESTful 的风格,都只有 GET 、POST 两种请求方式。

    例如:

    支付宝开放平台: https://opendocs.alipay.com/apis

    微信公众号开发文档: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

    阿里云: https://help.aliyun.com/document_detail/25483.html?spm=a2c4g.11186623.3.3.75e31067uSqiJe

    钉钉开发平台: https://developers.dingtalk.com/document/app/server-api-overview

    抖音开发平台: https://open.douyin.com/platform/doc/6848806536383383560

    你们的项目有使用 RESTful 接口规范吗,为什么?

    20 条回复    2021-05-17 19:51:18 +08:00
    12101111
        1
    12101111  
       2021-05-16 20:21:41 +08:00
    RESTful 并没有规范, 规范的是 openapi 这样的东西
    TomVista
        2
    TomVista  
       2021-05-16 20:26:16 +08:00 via Android   1
    场景不合适

    resetful 强调的对资源的不同操作,

    你提到的暴露的接口,往往是单独的功能,没有资源关联

    参考一下 strip 支付 api,
    wellsc
        3
    wellsc  
       2021-05-16 20:27:48 +08:00
    ?
    Mithril
        4
    Mithril  
       2021-05-16 20:49:01 +08:00   2
    纯粹的 Restful 是太理想化的模型,但凡你的业务稍微复杂一点,一个页面上的数据你就能搞出来几十个请求。
    实际实现上都会做不同程度的妥协的。
    renmu123
        5
    renmu123  
       2021-05-16 21:09:00 +08:00 via Android
    因为太过理想,不好用
    Cbdy
        6/span>
    Cbdy  
       2021-05-16 21:14:18 +08:00 via Android
    并没有你说的这个东西
    jeffh
        7
    jeffh  
       2021-05-16 21:51:43 +08:00
    RESTful 说到底不好管理,一个用户详情接口,带了每个人的用户 id,每个人都不一样。
    icanfork
        8
    icanfork  
       2021-05-16 21:51:49 +08:00 via iPhone
    反过来,为什么大厂不能有自己的规范呢
    zxCoder
        9
    zxCoder  
       2021-05-16 22:07:02 +08:00
    因为 restful 不好
    huangsen365
        10
    huangsen365  
       2021-05-16 22:20:45 +08:00 via iPhone
    因为需求经常改来改去…
    ch2
        11
    ch2  
       2021-05-16 22:25:17 +08:00
    GET 跟 POST 就够用了
    ddllzz
        12
    ddllzz  
       2021-05-16 22:27:57 +08:00 via Android
    有些需求不能抽象成处理资源
    oott123
        13
    oott123  
       2021-05-16 23:52:58 +08:00   1
    首先不要迷信大厂,大厂搞出来的东西未必是好的。

    至于为什么,我觉得是国内大厂这类接口缺乏专门的文档工程师或者技术作者来设计,接口就是码农自己设计的。
    optional
        14
    optional  
       2021-05-16 23:55:21 +08:00 via Android
    restful 抽象并不适合复杂的业务开发,会造成名词与资源量暴涨,反而类似 graphql 抽象成 query/mutation,这个也和 ddd 的 cq 对应
    ClericPy
        15
    ClericPy  
       2021-05-17 00:20:55 +08:00   1
    不要迷信 restful, 还是看场景, 有些大厂面向 action 设计也是挺有意思的, 之前 Leader 就让我们借鉴的 slack 那套.

    restful 不可否认在对资源对象进行增删改查很具备规范性和语义化, 但是有时候一个对象已经抽象到非常独立无法再细分(或者没有必要再分)的时候, 需要支持的操作可能也不仅仅是增删改查.

    比如平时对用户对象元信息简单的增删改查用 restful, 但是如果是一个用户自己的一堆乱七八糟动作却又没有资源变化, 这种情况找不到 resource 去接, 就不如直接语义化地去设计接口, 如一个用户和别人互相放招: user.shoot user.defend. 保留了语义和简洁, 而且只需要 GET 或 POST 就能定义一套接口, 还是比较省力的
    unco020511
        16
    unco020511  
       2021-05-17 10:50:15 +08:00
    不要迷信大厂
    youmoo
        17
    youmoo  
       2021-05-17 11:12:24 +08:00
    (无脑自荐),虽然和规范无关,这篇 [Spring Boot: 怎么封装一个易用的 RESTful 工具库]( https://mp.weixin.qq.com/s/f9KTzR6f8tW3P2BfrCjrIg) 对封装 RESTful 接口还是有用的。
    julyclyde
        18
    julyclyde  
       2021-05-17 12:18:29 +08:00
    只能说,对规范,各人有各人自己的理解

    举个例子,elasticsearch 的 /_cluster/settings 如果你要修改“其中一部分”内容,用 PUT,感觉对吗?但人家就是那样用的
    tonyaiken
        19
    tonyaiken  
       2021-05-17 14:15:12 +08:00 via iPhone
    我司有公开内部指引,大家都必须按照指引同一风格,内部有委员会统一评审通过才能上线。https://linkedin.github.io/rest.li/modeling/modeling#resource-methods
    zjsxwc
        20
    zjsxwc  
       2021-05-17 19:51:18 +08:00 via Android
    楼主你以为接口只是单纯的文件管理吗?
    接口不幂等的业务多了去了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5794 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:38 PVG 09:38 LAX 18:38 JFK 21:38
    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