调一个老系统的接口,对方发来几十页文档,要求按 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 传张图片,那基本是过度设计。