【Web架构系列】分析SOAP与HTTP的关系、REST与HTTP的关系

525 阅读3分钟

这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战


主要参考资料

延伸阅读


基本上,我们使用的REST、SOAP都是基于HTTP的 这造成了一种错误的意识:很多人以为REST、SOAP就是基于HTTP的

实际上,REST和SOAP理论上都没有指定要依赖于HTTP,事实上也完全可以不基于HTTP来实现。 但是理论归理论,作者在设计的时候,一定会十分考虑用当前稳定易用的HTTP来做==理论支撑==,这样才更贴近于现实、更好地解决问题、被容易被大家接收

换句话说,有好用的轮子为什么不用,而要自己设计。自己设计到最后,可能还是回归了到如今的HTTP

所以可以先说结论:==REST和SOAP都不必须基于HTTP,之所以用HTTP是因为:HTTP真的很爽==


那么HTTP到底爽在哪里?

一、SOAP与HTTP

SOAP不是直接使用的HTTP,而是在HTTP之上包了一层,即SOAP是基于HTTP协议的协议。 之所以大多数SOAP都基于HTTP,除了因为HTTP的成熟易用之外,最主要的目的其实是利用HTTP来穿透防火墙

对此,《架构风格与基于网络应用软件的架构设计》(Fielding的REST论文) 和《REST与SOAP的冲突》中均指出:这明显是对HTTP的误用,因为这直接导致防火墙失去了它应有的意义

  1. 截自《架构风格与基于网络应用软件的架构设计》 在这里插入图片描述
  2. 截自《REST与SOAP的冲突》 在这里插入图片描述

也正是由于SOAP对HTTP的误用,以及其基于xml的实现方式,共同导致了SOAP越来越重量化,最终被REST取代 (推荐阅读《REST杂谈:REST发展初期的坎坷之路(技术环境分析以及REST&SOAP的冲突)》)

二、REST与HTTP

REST直接使用HTTP,主要是因为HTTP协议的无状态特性、能够表名操作语义的请求方式(GET、PUT、POST、DELETE等)、缓存处理等,这些都符合RESTful无状态、统一接口、的约束原则

REST基于HTTP仿佛是一个必然的方式。除了以上的好处,如果了解一下HTTP的发展(推荐阅读-HTTP的发展史)以及REST的提出时间,我们还可以发现

  • 1999年HTTP1.1发布,新增了五种请求方法OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT、新增了缓存处理cache-control
  • 2000年REST论文发表
  • Fielding是REST的提出者,也是HTTP协议的主要设计者

所以,==REST论文是Fielding以HTTP规范作者的视角描述了web架构应该是什么样子的。Fielding的思想在REST的设计和HTTP上是一致的==,REST论文是将HTTP协议的设计初衷做了诠释

其实也可以这么说。Fielding虽然没说REST要基于HTTP,但其实背地里早就准备好连招了 (狗头)