调一个老系统的接口,对方发来几十页文档,要求按 WSDL 生成客户端。新人问:这不就是 HTTP 接口吗,为啥还要 SOAP?这俩不是一回事,一个是信封,一个是邮差。

关系先说清楚:不是并列的

HTTP 是传输层协议,负责把数据从 A 送到 B。SOAP 是建立在 HTTP(也可以走 SMTP)之上的消息格式规范,规定信封怎么包、头怎么放、错误怎么报。所以 SOAP 请求本身也是 HTTP 请求,只是把 XML 塞进了 body。把它俩当成对立的,是最常见的误解。

数据格式和风格差异

  • SOAP:固定用 XML,消息有 Envelope、Header、Body 三层,必须有 WSDL 描述接口,字段强类型,适合银行、电信这种要求契约严格的场景。
  • HTTP/REST:数据以 JSON 为主,用 GET、POST、PUT、DELETE 表示动作,轻量灵活,前端调试肉眼就能看懂。

一个对比看差别

同样查一个用户,REST 可能就是 GET 某个用户路径,返回一段 JSON。SOAP 要 POST 到同一地址,body 里写完整的 XML 信封,带命名空间,返回也是 XML。报文体积能差几倍,但 SOAP 有 WS-Security,加密和签名是协议内建的。

REST:  GET /api/user/1001
SOAP:  POST /UserService  内层是 XML Envelope

什么时候选哪个

企业内部老系统、支付网关、需要严格事务和安全的,继续用 SOAP 别折腾。新项目、移动端、前后端分离的,用 REST 或 JSON。同台服务器上两者可以共存,各走各的路由,不用二选一。

  • 判断提醒:如果对接方只给了 WSDL 没给 JSON 示例,别硬套 REST 去猜,按契约生成客户端最省事;反过来,有人让你用 SOAP 传张图片,那基本是过度设计。