要理解Web服务,这确实有点丛林。维基百科页面不错,但仍然缺乏一些元素。
我已将此答案标记为社区wiki,因此请随时更新或更正它。这只是一个基础。
一个臃肿的术语:
首先,术语Web服务用于指代许多事物。虽然许多人用它来指代基于SOAP的Web服务,但该术语可用于表示通过Web界面提供的任何服务;这是混乱的根源。
实现和设计风格:
-
基于 SOAP -- SOAP 仍然是 Web 服务的事实标准。SOAP 是 HTTP 之上的协议,它描述了消息和异常的交换。SOAP 从简单的东西发展到非常复杂的东西,以及后来添加的所有 WS-* 标准。最重要的是:WS-Policy,WS-Security,WS-Addressing,WS-Transaction。另一个重要的规范是用于大型消息的 MTOM。
-
RESTful - 术语RESTful与服务无状态并且所有相关信息都作为参数传递的事实有关。此外,不使用像SOAP这样的协议,而是使用普通的HTTP动词,例如,,,,。
Get
Put
Delete
Update
-
无状态 -- WS 通常是无状态的。处理的业务有时依赖于所谓的相关标识符(使用WS寻址),这些标识符用于将请求和响应匹配在一起;这与在cookie中存储会话标识符的想法相同,因为HTTP是无状态的。
-
有状态 - 有一些建议拥有有状态的WS,但我对它知之甚少。
实施和技术堆栈:
-
Servlet - 实现WS的最低级别方法:你基本上解析请求并自己吐出HTTP响应。
-
EJB -- 从 EJB3 开始,EJB 可以很容易地公开为 Web 服务。当然,需要一个 EJB 容器。
-
Apache Axis - 曾经是一个流行的技术堆栈,现在正在下降。
-
Apache CXF -- 另一个受欢迎的选择。
-
JBossWS - 又一个流行的选择。
-
JAX-WS -- 来自 Sun 的官方 Web 服务堆栈,非常好。到目前为止,我知道,这取代了JAX-RPC,它只是更名为JAX-WS。
相关概念和行话:
-
WSDL -- 在基于 SOAP 的 WS 的情况下,定义 Web 服务的协定/接口。
-
合同优先 -- 指技术能够支持预先提供的任何 WSDL 这一事实。与基于Web服务的实现生成WSDL的实现技术相反,在这种情况下,WSDL不能总是根据需要进行定制
-
配置文件 - 为了简化这种混乱,他们引入了配置文件,这些配置文件是需要支持互操作性的相关规范/功能组。主要的是WS-I基本配置文件。
-
UDDI 和发现 - 似乎有些人认为 Web 服务将发布在公共注册表中,以便潜在消费者可以发现。我不认为这个愿景获得了太大的动力。