如何在java中编写有效的Web服务

虽然这可能看起来像Java Web Services的副本,但我想知道从哪里开始并继续。过去,我花了很多时间来寻找从哪里开始,但我无法做到。 在阅读有关Web服务的页面时,有这么多的术语和混乱(至少对我而言!)。 有很多术语 – 比如JAX-RPC, JAX-WS, Axis, Rest, Servlet as WebService, EJB's作为Web服务以及其他我不知道的术语。 该用户组是否可以整合并提供易于理解和遵循的Java Web服务的高级概述? 感谢您的善意,感谢您的帮助。

这对于理解Web服务来说确实是一个丛林。 维基百科页面很不错,但仍缺少一些元素。

我已将此答案标记为社区维基,因此请随时更新或更正。 这只是一个基础。

臃肿的术语:

首先,术语Web服务用于指代许多事情。 虽然许多人使用它来引用基于SOAP的Web服务,但该术语可用于表示通过Web界面提供的任何服务; 这是混乱的根源。

实施和设计风格:

  • 基于 SOAP – SOAP仍然是Web服务的事实标准。 SOAP是HTTP之上的协议,用于描述消息和exception的交换。 SOAP从简单的东西发展到非常复杂的东西,后来添加了所有的WS- *标准 。 最重要的是:WS-Policy,WS-Security,WS-Addressing,WS-Transaction。 另一个重要规格是MTOM用于大型消息。
  • RESTful – 术语RESTful涉及服务是无状态的,并且所有相关信息都作为参数传递。 此外,不使用像SOAP这样的协议,而是使用普通的HTTP 谓词 ,例如GetPutDeleteUpdate
  • 无状态 – WS通常是无状态的。 处理的业务有时依赖于所谓的相关标识符(使用WS-Addressing),用于将请求和响应一起匹配; 这与将会话标识符存储在cookie中的想法相同,因为HTTP是无状态的。
  • 有状态 – 有一些建议要有状态WS,但我不太了解它。

实施和技术堆栈:

  • Servlet – 实现WS的最低级别方法:您基本上解析请求并自己发送HTTP响应。
  • EJB – 从EJB3开始,EJB可以非常容易地作为Web服务公开。 当然,需要一个EJB容器。
  • Apache Axis – 曾经是一个流行的技术堆栈,现在正在下降。
  • Apache CXF – 另一个受欢迎的选择。
  • JBossWS – 又一个流行的选择。
  • JAX-WS – 来自Sun的官方Web服务堆栈,非常好。 到目前为止,我知道,这取代了简单地重命名为JAX-WS的JAX-RPC。

相关概念和行话:

  • WSDL – 在基于SOAP的WS的情况下定义Web服务的契约/接口。
  • 合同优先 – 指的是技术能够支持任何预先提供的WSDL。 与将基于Web服务的实现生成WSDL的实现技术相反,在这种情况下,WSDL不能总是根据需要进行定制
  • 配置文件 – 为了简化这种混乱,他们引入了配置文件,这些配置文件是需要支持互操作性的相关规范/function组。 主要是WS-I Basic Profile。
  • UDDI和发现 – 似乎有些人认为Web服务将在公共注册中发布,以便潜在的消费者可以发现。 我不认为这个愿景获得了很大的动力。

我所知道的“契约优先”Web服务的最佳解释是Spring Web服务模块 。