公司规定所有接口都用POST请求...

作者:佚名来源:知乎

最近在逛知乎的时候发现一个有趣的问题:公司规定所有接口都用 post 请求,这是为什么?

图片来自 包图网

看到这个问题的时候其实我也挺有感触的,因为我也曾经这样问过我自己。

在上上一家公司的时候接到一个项目是从零开始搭建一个微服务,当时就有了解过接口的一些规范。

比如耳熟能详的 Restful 规范,就被应用到这个微服务项目中。今天再次看到这个问题,我也有了一些新的理解和感触。

临时回顾了一下 get 与 post 的请求的一些区别:

post 更安全(不会作为 url 的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)post 发送的数据更大(get 有 url 长度限制)post 能发送更多的数据类型(get 只能发送 ASCII 字符)post 比 get 慢post 用于修改和写入数据,get 一般用于搜索排序和筛选之类的操作

get 请求的是静态资源,则会缓存,如果是数据,则不会缓存

查看上面的区别,就会发现 post 在发送数据量大的请求时优势很显示,get 则更适合获取静态资源、简单的查询等接口。

我个人在开发接口的时候也会注意,将简单的查询请求使用 get 方法,其他增、删、改、复杂的查询请求都可以使用 post,但不会像题主的公司一样全部使用 post。

网友:程墨 Morgan

网友程墨 Morgan 提出如果是自己,会按照『业界最佳实践』制定规范:

网友:苏莉安

另外一个知友提出:就是为了迁就低水平不思进取的架构师和前后端程序员们。

网友:大宽宽

我打算跳出技术的范畴,从 ROI 的角度讨论下如果一个架构风格(比如 Restful)真的那么好,为啥应用上没有那么广泛?

首先要明确,不管你多么喜欢技术,无论是这里说的一个 http 的 method,又或者是编程语言的一些用法、架构设计方法、甚至是 OKR 这样的管理和沟通的方法。

这一切,都是为了满足企业对市场的需求。简单来说,公司给你发工资,不是为了让你遵守规范的,而是为了能在成本可接受的情况下,让业务落地。

而其中,一般情况下,接口的形式是个微不足道的局部问题。

对于企业来讲,技术团队要解决的更重要的问题,是理解业务模型,形成业务架构和可以稳定跑的系统;是面对大量涌入用户对系统可用性的要求对系统不会卡顿挂机的扩展性保障;是不会动不动抽疯一下,丢条数据或者数据冲突的稳定性要求,以及为了达成这些要求给监控体系的各种便利。

但一定要纠结下 POST/GET,以及 Restful。好吧,Restful 能明确列出来的好处,就那么几点(如果有疏漏的请在评论区里补充):

表达不同的业务动作语义:GET/POST/PATCH/PUT/DELETE……表达“资源”的概念利用url path,querystring,header,status code 等来表达很多接口功能以上两条可以达成一种“统一”的接口表达形式,以至于可以围绕这个形式实现接口维护的工具,比如 swaggerGet 资源可以利用缓存但代价是什么?强行的统一,让本来天然不是资源的业务概念也一定要强行“资源“一下,引发了更多的理解不一致和沟通困难。

当然,事物总是和可以“抽象”一下,业务概念抽象为“资源”很多时候都是可行的。

但这这么做的收益除了证明“一个人聪明,有不错的抽象能力“,以及“更容易利用上 swagger 一类的工具“之外,我看不到啥额外的短期或者长期收益。

乱折腾 path,querysting 等东西,让横切面治理抓取关键信息更难了。比如监控时抓一个 path 里带变量的 url 是非常恶心的事情。

又或者看到一个 404 的报警,却根本搞不清楚到底是服务部署有问题;还是服务正常,但用户不存在;又或者是用户存在,但用户订单不存在。带来的问题是运营工具编写困难,线上问题响应能力会被降低。

即使使用 swagger,还是需要写说明和文档来说明其业务语义。接口工具应该提供的“好理解,接口改了后文档自动生成”等好处,只有在接口反应的资源刚好和后台数据表/视图能够对应上才有效。

也就是说只适合接口层级低的场景下有用,而对高层接口意义不大。结果开发者既要用 swagger 这样的工具,同时还是要看常规文档。本来用一套机制可以解决的问题要改成两套。

Cache 虽好,但最怕的是管控不到位让用户拿到了过期数据。对于 Cache,业务上一般会区分动态接口和静态接口。

前者默认不应该有 cache,所以用了 Get 之后为了防范,还得手工在大部分动态接口上加 Cache-Control:no-cache,或者动态产生 ETag(浪费 CPU)。而后者一般会采用 CDN,这一套针对 cache 做了很精巧的设计。

使用形式各异的 method 和 url path,querystring 上做各种奇怪的拼接,会给前端带来巨大的困扰,因为本来一个函数调用,还得翻译一遍,活生生的弄出来一个接口翻译层。

妥妥的降低人效。如果是 Web,iOS,Android 三套前端,就得弄 3 个接口翻译层。

非 GET 和 POST 之外的 method 有可能会被不恰当的网关转发规则给干掉。

为此 Restful 还是搞出了 method override 这样的招数……所以到底适不适合,落地时听骂声和吵架声就知道了。

有人举了 Google S3 运用 Restful 接口的例子来说明其正确性。但 S3 是干什么的大家都懂,S3 天然就是用来存取“资源“的。一个工具用在了恰当场景,当然是“正确“的。

S3 用的好的东西,只能说明类似的阿里云 OSS,腾讯云 COS 也可以这么干。但无法证明电商业务、社交业务、I医疗业务、政企办公协同……这些业务也适合这么干。

而作为技术负责人,如果他搞出了一套接口方案(也许其中一条就是所有 http 接口都用 post),提高了开发效率,降低了沟通成本,降低了运维和错误定位成本,为企业真正做到了降本增效。

把瞎折腾的成本,投入到了其他比如业务架构设计,测试体系,线上监控,容灾降级等领域上。

最终让企业(用户需求得到满足,收入增加)和员工得到了收益(因为公司收入增加而涨薪)。

我会评价这样的人为“真正懂架构,懂技术,善于用技术解决实际问题。水平不知道高到哪里去了“。

如果一个技术负责人只知道遵守一个书上写的,但从没验证过在自己的环境有效的方案,以至于让企业的核心目标无法达成。他就是赵括,该马上卷铺盖卷走人。

至于我司,使用的规范是:对于动态业务接口,只有一个接口 POST /action,在 Header 里给 X-Action 给出具体的接口名称交给网关路由,session 表示用户登录身份,以及用于推荐、防重、染色、安全用到的各种 token/签名。

所有的业务请求参数都以 PB 编码后放在请求体里,并和后端的 gRPC 体系衔接。接口除了防重试之外,不提供常规意义上的 Cache。

而对于静态接口,走 CDN,做多级 Cache。该用 Get 用 Get。如果一个动态接口也想利用 http 层 Cache,可以向网关申请和配置。有没有 Cache,cache 多久是网关和端上自己实施的,完全自己管控。

各位读者可以参考看看,并根据自己所处的业务场景和前后端交互思考下“我们目前用的技术规范是性价比最高的吗,是最合适的吗?”

如果是你来设计公司的 API 规范,会规定所有接口都用 post 请求吗,这是为什么?

来源:zhihu.com/question/336797348

原文地址:https://www.toutiao.com/article/7039501012197016078/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


所以很多人都会选择将这些生活琐事来交给智能化产品,在众多产品中,扫拖机器人所给我们带来的便利性最强,扫地、拖地全都一气呵成,不需要人为过多干预,不过目前大多数扫拖机器人对于双手解放得不彻底。而石头作为
“昨天的经历都将成为明天的力量。” 将绝大部分精力都奉献给璃月港的刻晴,可以说是《原神》中的高人气角色了,虽然是常驻角色,并且对于普通玩家来说……刻师傅别刮了……不过作为开服就存在的角色,还有独特的剑法
最近,全球知名的通信产业盛会MWC 2024(2024世界移动通信大会)正式召开,其中,联发科以“连接AI宇宙”(Connecting the AI-verse)为主题,为大众展示出一系列在AI和移动通信技术等领域的最新突破,吸引了大量行业
今年上半年有很多值得关注的机型,其中华为最新的影像旗舰华为P70 Art也自然受到了业界不少的关注目光,目前关于这款机型的轮廓图已经在网上曝光。
目前,2024世界移动通信大会(MWC)正在西班牙巴塞罗那举行,值得一提的是,此次大会参展中国厂商非常多,包括华为、中兴、小米、荣耀等等多家厂商均在其列。
就在去年,真我推出了11 Pro+,用一个2亿像素传感器和zoom变焦功能,开启了中端手机影像的长焦大战,而后友商才姗姗来迟的跟进了2亿像素传感器。
【手机之家新闻】一年一度的MWC已经于当地时间2月26日在巴塞罗那正式开展,在本次MWC2024上全球各大厂商齐聚一堂,展出自家最新的技术与产品,其中中兴就参展本次MWC2024,并且展出了诸多面向企业端的产品,而旗下的
近日,联发科在MWC 2024(2024 世界移动通信大会)上展出了一系列令人瞩目的AI和移动通信技术突破,以“连接AI宇宙”(Connecting the AI-verse)的展厅吸引了无数业界精英和媒体的目光。特别是其现场的生成式AI技术
虽然目前国内已经有不少厂商入局折叠屏产品,但是努比亚却迟迟没有入局。不过在近日举办的MWC 2024展会上,努比亚发布了自家首款折叠屏手机——努比亚Flip,预计国内很快也会上市。
MWC 2024正在西班牙巴塞罗那举办,和往年一样,荣耀这次依旧携众多新产品、新技术参会。荣耀Magic6 Pro、荣耀Magic V2 RSR保时捷设计的机型在海外正式发布,并且还展示了魔法大模型、任意门等诸多新技术。
MWC 2024正在西班牙巴塞罗那如火如荼地举行,其中小米也参加了今年的大会,在会上发布了在国内大受欢迎的小尺寸旗舰——小米14。值得一提的是,高通公司CEO安蒙甚至亲临发布会现场为这款机型助阵。
《原神》是一直以来在机圈深受欢迎的游戏,在充满幻想的提瓦特大陆上,你可以邂逅不少性格迥异、能力独特的伙伴。而一加Ace系列一直就拥有非常强烈的电竞属性,也是畅玩《原神》的热门机型,而在本月,一加Ace 3将推
有不少网友发现,今年新机的发布时间相对于往年大幅提前,很多厂商在春节之前密集发布了自己最新的中高端机型,给人一种年后没什么新机可发了的感觉。不过魅族全新的大杯机型——魅族21 PRO非常值得期待,魅族科技也
2022年7月,小米12S Ultra正式发布,这款产品率先将1英寸大底主摄引入到移动影像领域,同时凭借鲜明的徕卡影调给人留下深刻的印象,同时这款产品也被视为了影像旗舰地位的机型。如果从那时算起,到现在差不多已经快过
随着智能手机的日益普及和智能化进程的加速,智能穿戴设备成为了人们关注的焦点。各大智能手机厂商纷纷进军智能穿戴市场,试图在这一新兴领域抢占先机。
早在去年秋天,HyperOS操作系统发布的时候,小米便勾勒出了“人车家全生态”的美好蓝图,而在这其中,小米的多终端统一战略是核心,目前已经有不少小米产品预装或者接受到了HyperOS操作系统的推送,在过去几个月的时
今年雷军将把更多的精力放在小米汽车上,所以接下来的手机业务将由刚刚兼任小米品牌总经理卢伟冰接管。同时雷军也在微博上表示小米2024年开年旗舰——小米14 Ultra即将在近期发布,并且将有卢伟冰进行讲解。另外,卢
新的一年有龙则灵,有愿必达。自1月19日起,荣耀加码“新年荣耀,一起成龙”年货节,在全国荣耀线下门店上线了“新年许愿处”、“龙运当头”等趣味活动,吸引大批消费者到店打卡许愿,戴龙头迎好运。与此同时,为了回
小米在官网微博中已经透露了关于小米14 Ultra信息,所以新机上市应该不会太晚。根据德国莱茵的官方消息,目前小米14 Ultra(型号为24030PN60G)获得了莱茵无频闪认证,表明这款手机可以有效减轻屏幕给用户带来的视觉疲
2月22日,上海广播电视台与华为举办鸿蒙合作签约仪式,宣布其官方客户端看看新闻APP将基于HarmonyOS NEXT鸿蒙星河版启动鸿蒙原生应用开发,为用户提供更加极致的新闻资讯服务体验。此次合作标志着上海广播电视台成为全国