“Web Service”概念的解释说明

5

我对可用的Web服务的定义和实现存在一些困惑,需要一些澄清。以下是我迄今为止使用过的:

  1. 如果供应商向我提供特定格式的XML,我可以将其填充数据后发送HTTP POST请求到Internet上,并将XML字符串作为有效负载传递,这是否算作Web服务调用?如果是,那么这种Web服务有没有具体的名称?因为显然,它不使用类似于Axis、WSDL或SOAP的任何东西来建立此连接。

  2. 这个的变体就是,如果供应商向我提供了XSD,我使用JAXB将其转换成java类并传递对象的序列化版本,最终结果与选项1相同。

  3. RESTful web service:供应商向我提供像http://restfulservice/products这样的URL地址,我可以通过HTTP请求访问该URL,并根据使用的HTTP动词调用适当的操作并发送响应。

以下是我只听说或大致了解的:

  1. SOAP. 这是怎么工作的?我读过W3Schools的教程,我理解使用符合W3C标准的非常特定的XML来传递与选项1中相同类型的消息,但在实际生活中如何工作呢?供应商向我发送什么?我生成类吗?我序列化一些对象并将它们HTTP POST到一个地址上吗?还是生成的对象本身具有连接方法来代替我完成这些任务?

  2. 那WSDL呢?供应商什么时候会向我发送WSDL,我该怎么办?我猜我可以从WSDL生成类。如果是,请问我应该如何使用生成的类?

  3. 什么时候需要axis jar才能从供应商发送的某些内容中生成类?

正如您所看到的,我对可用的不同类型的Web服务有一些明确的和其他大多数模糊的想法。如果有人可以澄清和/或指向更多现实世界的资源,那将非常有帮助。我在互联网上稍微了解了一下Java Web Services,但被扔给我的众多四个字母的缩写让我感到头晕。

谢谢

2个回答

4
如果供应商给我一个特定的XML格式,我可以填充数据并发送HTTP POST请求,将XML字符串作为有效载荷传递到网络上,这算是Web服务调用吗?如果是,这种类型的Web服务有没有特定的名称?
是的,这仍然是Web服务。它没有“官方”名称,我通常称之为XML-over-HTTP,主要是因为我想不出更好的名称。
SOAP是怎么工作的?我读过W3Schools的教程,了解到有一种非常特殊的XML形式根据W3C标准进行标准化,我们使用它来传递与选项1中相同类型的消息。
SOAP提供了一个标准的包装器层,围绕着您在(1)中发送的消息。该包装器提供诸如指示您正在调用哪个操作的指示之类的信息。它还可以提供安全服务、事务信息等等。通常它是一个相当薄的层。
那么WSDL呢?供应商何时向我发送WSDL以及我该怎么处理它?我猜我可以从中生成类。如果是这样,那我该如何处理生成的类?
同样,WSDL是一个相当薄的层,这次是围绕XML模式。它定义了SOAP消息在运行时将调用的操作,以及请求和响应的模式类型。这是一种形式化XML文档交换接口的方式。
例如,您有一个XML模式,并且像您描述的那样有一个Web服务:
- 使用JAXB从模式生成Java源代码 - 将符合该模式的XML文档通过HTTP发送到Web服务
使用WSDL和SOAP,您会稍微扩展一下:
- 在XML模式周围编写一个薄WSDL包装器,规范可用的操作。 - 使用WSDL导入工具为该WSDL/模式生成客户端/服务器存根。在Java中,这通常包含JAXB。 - 使用SOAP客户端/服务器调用Web服务
如您所见,它本质上是相同的过程。不同之处在于SOAP/WSDL提供了更多信息和上下文给工具,使得这些工具可以为您做更多的工作。但它并没有太大的区别。

0
如果您从某个地方获取了一个WSDL文档,那么您需要知道的就是它定义了一个服务接口。您可以通过自己喜欢的语言绑定生成器运行它,以便生成代码来调用该服务。通常意味着您将使用HTTP上的SOAP消息与服务进行通信。SOAP只是在发送相当任意的XML消息时的包装器。
Axis是Java中执行此操作的库(客户端和服务器端都支持)。我怀疑其他库中有更好的实现。

我怀疑其他库中有更好的实现。你为什么这么说?你有任何证据还是这只是一种FUD风格的评论? - Stephen C
1
嗯,我确实花了相当多的时间在修复Axis 1中的错误,并且我对Axis 2代码的阅读(公平地说,现在已经是几个月前的事情了)表明它仍然存在重大问题。但我从未将我的更改反馈到上游;它们通过将所有内容更紧密地绑定到我们在该项目中真正执行的操作来降低了灵活性。随后,我们迁移到使用不同的WS堆栈,因此我的努力转向其他方面。该项目现在在Jetty之上使用Xfire,我们可以推荐它。 - Donal Fellows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接