最近去图书馆借了本《Java Web 服务编程指南》,读了第一章,写点自己的看法吧。
在还没有接触这本书的时候,我一直的以为WS就只是网络上的web应用,这么说吧,就是我们经常上的网站。看了第一章之后,我才发现之前的直观的看法是错误的,Web Service并不只是一个网站。Web Service使我们能够对网络上的一个对象进行远程调用,也就是Remote Procedure Calls,RPC。
我是这么理解的,一般性的网站我们也可以看成是广义上的Web Service,但是Web Service并不仅局限行一般性的网站,他更加强大的功能在于提供一个公开的,标准化的接口,让所有的客户都能通过一服务注册表,查找到此项服务,并对此项服务进行绑定。客户可以通过这个公开的,标准化的API接口,进行远程的服务调用。这些服务如,查询天气预报,查询机场服务,在一个网络商场进行下订单操作,等等。只要服务商愿意公开他的Web服务,并在服务注册表发布其服务,所有的潜在客户都可以通过在服务注册表中查找此服务,并得到关于此项服务的一些具体的描述,从而在服务商与客户之间建立bind关系,远程调用这些服务。
在Web服务中,我们可以看到有三个不同的角色。他们之间的交互关系如下图所示。
从这个图我们可以很清楚地看到三者之间的关系。服务提供者提供Web Service,服务消费者是使用此服务客户,而位于最顶端的服务注册表,则为两者互相寻找对方提供了一个桥梁。服务提供者在服务注册表上发布自己提供的服务,服务消费者从服务注册表上查找自己需要的服务,找到后,就可以在服务消费者和服务提供者之间进行绑定,服务消费者就可以对服务提供者提供的服务进行访问,远程调用。这里需要注意的是,服务提供者提供的服务可能是一个非常复杂的服务,他这项服务可能还会调用其它服务提供者提供的服务,他将所有的这些信息整合处理,最终为服务消费者完成此项服务。当然这项服务也可以很简单,简单到服务消费者发起一个访问,直接返回一个响应就可以了。
三个实体之间要进行通信,为了保证这些通信都能顺利的进行,我们需要为这些通信定义规则,如果大家都遵守这些规则行事,这样我们提供的服务就可以给任何消费者使用,消费者也就可以使用任何的服务提供者的服务了。这些规则有:
- Web Service Description Language, WSDL,Web服务描述语言,用来描述Web服务。
- Universal Description, Discovery, and Integration, UDDI,通用描述,发现,集成标准。这个是用来发布和查找Web服务的标准协议。
- Simple Object Access Protocol,SOAP,简单对象访问协议。用于绑定到Web服务的标准应用程序协议。
这三个协议可以简单的和上图的三个操作对应。
最终我们得到了基本Web服务栈:
上面的功能都需要下面的支持。从最底层我们可以看到,Web服务不一定是建立在HTTP之上的,我们可以使用多种基于TCP/IP的应用层协议来实现我们的web service。