简而言之,Web service是一种跨语言,跨平台的远程调用技术。既然是一种技术,那它就不针对于某种具体的编程语言。通过这种技术,可以实现这样一种目的:某台设备提供一种服务,另一个远程的设备可以通过网络来获取到这个服务进而使用这个服务。对于这个远程的设备来说,这样的服务是“黑盒” 的,是看不见的。
From Wikipedia:
The term web service is either
- (generic) a service offered by an electronic device to another electronic device, communicating with each other via the World Wide Web, or
- (specific) a web service implemented in the particular technology or brand, W3C Web Services.
In practice, a web service commonly provides an object-oriented web-based interface to a database server, utilized for example by another web server, or by a mobile app, that provides a user interface to the end user.
1. 概念
远程调用
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的函数或方法。
这个很好理解,我们常说的一个方法调用另一个方法,一般来说都是在一台主机上实现的过程,那么远程调用就是需要在不同的主机之间实现方法的调用。
跨语言,跨平台
一般来说,如果我们使用同一种语言来开发某个程序,那么方法之间的调用就没有什么太大的难度,程序之间没有什么“隔阂”。可是如果是不同的编程语言开发的程序之间需要互相调用呢?Web service通过SOAP技术就解决了这个问题。
2. 技术
- XML + XSD
- SOAP
- WSDL
- UDDI
3. 过程
From Wikipedia:
Web services architecture: the service provider sends a WSDL file to UDDI. The service requester contacts UDDI to find out who is the provider for the data it needs, and then it contacts the service provider using the SOAP protocol. The service provider validates the service request and sends structured data in an XML file, using the SOAP protocol. This XML file would be validated again by the service requester using an XSD file.
服务端开发服务
服务端可以使用任意一种语言来开发自己的web service服务。
服务端发布服务
服务端的服务程序开发好以后,会生成一个WSDL文档。服务端通过WSDL来说明自己可以提供什么样的服务,这个服务所对应的方法名、参数以及返回值是什么。服务端可以将自己的WSDL直接暴露给客户,也可以通过UDDI发布出去。
客户端获取服务
客户端可以直接从服务端获取WSDL,也可以通过UDDI获取。获取到WSDL后,就可以获取到服务端的服务了。一般来说,客户端会通过WSDL来获取到服务端程序的接口,不需要知道服务的具体实现方法。
客户端使用服务
客户端获取到服务端的接口后,就可以编写服务端代码通过直接调用接口来使用服务端的服务。在调用的过程中,双方通信使用了SOAP技术,因此可以实现“跨语言,跨平台”的要求。
4. 开发
Web service既然解决的是“一个主机上的程序调用另一个远程主机上的方法”这个问题,那么针对web service的开发就涉及到两个方面,一个是服务端(service end point)的开发,另一个是客户端(client end point)的开发。服务端提供某个服务,客户端通过某种方法可以直接获取到这个服务供自己使用。
网上很多例子都是用Java开发服务端服务并且用Java开发客户端程序的。Java有自己的API用来实现web service服务,所以很方便。当然也有一些别的框架可以实现web service。
Java在实现web service服务时用到了“注解”这一工具。因此我也学习了一下Java的注解机制。在此贴一篇我认为解释得很通俗易懂的文章:https://blog.csdn.net/briblue/article/details/73824058/
以下是我学习Web service过程中接触的一些简单的开发案例:
https://blog.csdn.net/sdksdk0/article/details/52106690
https://blog.csdn.net/qazwsxpcm/article/details/70370490/
https://www.cnblogs.com/AlanLee/archive/2017/06/02/6933073.html
5. 链接
以下是我学习Web service的过程中看到的不错的博客文章:
https://www.cnblogs.com/xdp-gacl/p/4048937.html
GOOD LUCK TO EVERYBODY
THANKS