REST 是什么?为什么它让系统"活得更久"
Site Owner
发布于 2026-05-11
REST不是一种技术,是一种架构哲学。本文深入解析REST五大设计原则,揭示无状态为何是系统可伸缩性的关键,及其与SOAP的本质区别。

REST 是什么?为什么它让系统"活得更久"
2018年,某银行上线了一套基于SOAP协议的核心系统。2021年,他们决定做移动端改造。开发团队面临的第一道坎不是业务逻辑,而是——没人能在合理时间内读懂那套WSDL接口定义。最后花了八个月,先把SOAP翻译成REST,才开始真正做业务。
这不是段子。这是REST最朴素的价值:让系统活下去,而且活得体面。
REST不是一种技术,是一种"活法"
很多人知道REST是因为它和RESTful API一起出现,被当作某种"JSON化"的HTTP接口。但这个理解有点偏。
REST全称是Representational State Transfer,翻译过来是"表述性状态转移"。听起来很拗口,但它的核心想法一句话就能说清:网络上的所有东西都是资源,每个资源都有唯一地址,所有操作都通过统一接口完成,且服务器不保存任何客户端状态。
前三条还好理解。最后一条——"无状态"——才是真正反直觉的地方。
传统思维是:用户登录了,服务器记住他;加入购物车了,服务器也记住。但REST说,不行,每次请求都得自带身份证明,服务器翻脸不认人。
这听起来很蠢。但恰恰是这个"蠢"的设计,让系统拥有了横向扩展的超能力。
无状态为什么是性能外挂
服务器不记人,意味着什么?
意味着任何一台服务器都能处理任何请求。用户A的请求今天经过北京机房,明天漂到上海机房,后天换到成都机房——对他来说毫无区别。服务器集群可以随时增减,不用担心"会话粘滞"带来的负载不均。
做过分布式系统的工程师都清楚,有状态的服务做扩容有多痛苦。一个用户 session 落在哪台机器上,这台机器挂了怎么办?解决方案通常是" session 复制"或者" session 集中存储到 Redis",但每多一步,就多一层复杂度,多一个故障点。
REST把这层复杂度直接砍没了。
举两个对比:某电商大促时扩容了200台服务器,由于采用无状态的REST API,新增机器在30秒内就自动开始承接流量。而另一家采用有状态架构的竞品,同样的扩容操作花了40分钟做状态迁移,峰值期间还出现了短暂的购物车丢失问题。
差距就这么出来的。
五条原则,每条都是代价换来的
REST的五条原则不是拍脑袋想出来的,是Roy Fielding在2000年研究了一堆Web架构之后总结出来的。每一条背后都有实际教训:
1. 一切皆资源。 用户是资源,订单是资源,甚至"当前用户的未支付订单数"也可以是资源。好处是命名统一,坏处是——有时候你觉得这是个"动作",硬要把它拗成"资源",会有点别扭。比如"转账",你得把它理解成创建一个"交易记录"资源。
2. 唯一资源标识。 每个资源有且只有一个URI。这条简单,但很多团队做不好:同一个用户信息,GET /getUser、GET /queryUser、GET /user/detail都能拿到,结果是维护三套接口文档,不知道哪套是最新的。
3. 统一接口。 所有操作归结为GET/POST/PUT/DELETE。听起来限制了自由度,但换来的是全局可预测性。任何懂HTTP的人,不用看你文档,大概能猜到你的接口怎么用。
4. 操作不改变标识。 这个有点哲学味道。/users/1代表用户1,不管他改名、换手机号、注销,这个URI始终是他。有人问:为什么不让URI"动态化"?答案是——URI是资源的身份证,不是它的当前状态。一旦允许URI随状态变化,缓存就全废了。
5. 无状态。 再强调一遍:每个请求自带认证信息,服务器不保留会话。为什么重要?因为这是系统能水平扩展的前提,也是DevOps最爱的特性——发布时不用等所有用户登出,服务器说换就换。
REST vs SOAP:不是谁更好,是谁更合适
考试必考REST和SOAP对比,现实中这场对决早就没有悬念了。
| 对比项 | REST | SOAP |
|---|---|---|
| 协议 | HTTP | HTTP+SMTP+TCP |
| 数据格式 | JSON/XML | 强制XML |
| 接口定义 | 自由约定 | 强制的WSDL |
| 开发体验 | 轻量,直接 | 重量,繁琐 |
| 性能 | 高 | 较低 |
但这不代表SOAP一无是处。在企业级集成场景,SOAP的WSDL强类型定义反而是优点——你知道自己拿到了什么,IDE能做完整的类型检查。银行、政务系统的老接口用SOAP,大概率是因为当年这个"严谨"是加分项。
问题是:你是在建发电站,还是在做一个每天迭代的互联网产品? 前者需要严谨,后者需要速度。REST赢了,因为大多数现代系统更需要速度。
过了二十年,为什么还在考REST
2026年,系统架构设计师还在考REST,不是因为这个知识点有多难,而是因为它定义了一代人的Web API设计范式。
GraphQL出现了,说要解决"一次拿太多数据"的问题。gRPC出现了,说要解决"性能"的问题。MCP出现了,说要解决"AI模型连接外部工具"的问题。但这些新范式无一不在某些场景面临REST早年已经解决过的问题——URI怎么设计,无状态怎么落地,统一接口的边界在哪。
换句话说,学REST不是为了记住一个历史知识点,而是理解Web架构设计最核心的那几个权衡。无状态换来了可伸缩性,失去了什么?统一接口换来了可预测性,失去了什么?这些trade-off的思维方式,比REST本身更有生命力。
所以呢
如果你在设计一套对外暴露的API,问自己几个问题:
- 这个接口是"资源"还是"动作"?能改成资源吗?
- 同一个资源,是不是只有一个URI?
- 加一台服务器,需要改任何代码吗?
- 如果明天把这套接口交给一个新团队,他们能不看文档就猜到大概用法吗?
如果任何一个答案让你犹豫,REST的设计原则值得你再咀嚼一遍。
这套方法论诞生于2000年,用来解决当时的问题。二十五年过去了,我们有了Kubernetes、有了微服务、有了云原生,但服务器不记会话这件事,依然是系统可伸缩性最朴素的起点。
好的架构不是让系统能做更多,而是让系统能活得更久。 REST做到了。