我理解的webservice是这样的
最近在工作中遇到这样的一个项目(暂且定为项目a),项目a本身是用php开发的,但是其数据是来自于另一个使用java开发的项目(暂且定为项目b),项目a不能操作项目b的数据库,它有其自己的一套数据库,只是有些地方需要用到项目b中的内容。所以在这里就需要一种通信方式,可以使b中的数据可以传到a中。很当然的就选择了webservice,我使用php在项目a中搭建了webservice服务,向b提供了我需要实现的接口,只要b调用相应的接口,按照接口要求的数据格式将数据传输到a中,这就大功告成了。
那webservice究竟是个什么东西呢,刚开始使用的时候我在网上也查了很多的资料,下面就我自己对webservice的理解向大家分享一下。
webservice可以看做不同设备之间通信的一种标准,和具体的某种语言没有关系,如果非要说有关系的话,那就是每种语言都按照这个webservice标准来开发相应的函数以实现此标准。就向我上面说的项目b向项目a传输数据,需要按照这个webservice标准来传输才可以成功。
当然对于上述案例如果说是项目a需要在本地存一份项目b中的部分数据,但是对于业务逻辑是和b没有关系的,那么就需要a来提供webservice服务,由b来调用接口发送数据,接下来就没有b什么事儿了,仅当b中相应数据有更新的时候,再次调用a提供的webservice接口更新a中的数据就可以了。但是如果业务是这样的,项目a不需要存b中的数据,它只是用b中的部分数据做展示,那我们就需要在b中搭建webservice服务,提供相应的接口,由a调用b提供的webservice接口以此取出b中的数据,那这样当b中数据有更新的时候,a调用的数据也是最新的。
上面说了这么多,无非就是一句话
webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接口,哪种语言来调用要看项目的需要。
既然是一种标准,那就需要有相应的技术来支持这个标准的实现。下面就出现了webservice中的四种技术——xml、wsdl、soap、uddi。在一套完整的webservice服务中,这四种技术各有其自己的实现价值,下面分别来介绍一下各自的用途
1.xml
xml是用来标记数据的(对于xml标签详细介绍,可以参考w3c),因为上面我们说过,webservice不依赖于某一门特定的编程语言。而不同的系统可能是使用不同的编程语言来开发,(如上:项目a使用php开发,项目b使用java开发)所以说就需要一种方式来交换数据,这种方式同样不依赖于某种编程语言,大多数软件都集成了xml标签,因此使用xml格式的数据来实现数据的交换。
2.soap
soap是一种特殊的协议,用来传输数据。当调用方一旦发现提供webservice接口的地址,它将会使用soap协议和提供webservice的系统进行连接。
3.wsdl
wsdl用来描述客户端可以调用的接口的规则,所有这些规则定义在wsdl文件中,当有客户端发起调用的时候,webservice提供方会参考这个wsdl规则来验证数据请求的合法性。
4.uddi
uddi列出了那些服务是可以被访问的。当一个系统需要数据的时候,首先它会先查找uddi,找出从除了自己之外的那些可以获取到自己需要的数据的服务,然后进行链接获取数据。这一点有点类似于dns的功能。
以上分别介绍了这四项技术在整个webservice架构中的角色,下面我们将这四项连起来,看一下整个webservice的架构是如何实现的。
首先,webservice的提供方会在wsdl文件中新建一些接口的规则,然后将wsdl文件发送给uddi进行报道注册。服务请求方(也就是调用webservice接口的一方)会先连接uddi来查询哪一个提供方有自己需要的数据,找到以后然后连接这个服务提供方,此时和提供方使用soap协议进行交互。当服务方收到请求以后,首先会对这个请求进行验证,验证的依据就是先前新建的wsdl规则。验证通过以后服务方会向请求方发送xml格式的数据,此时同样是使用soap协议进行交互。当请求方收到xml数据以后,请求方会使用xsd来验证此xml数据的合法性。验证通过以后再进行数据的处理。
整个过程可以用下图反映
以上就是整个webservice的实现过程。看此过程总感觉和web应用的流程有些类似,首先需要将域名和ip地址绑定,在dns中报道注册。当用户访问的时候,首先会带着域名去访问dns服务器,dns会解析域名到对应的ip地址,并将此信息返回给用户,用户得到ip以后,会根据ip去访问对应的网站服务,此时用户和web服务之间使用的是http协议。
以上就是我对webservice的理解,至于webservice在什么情况下使用合适,我也不好说,我只能说这个得根据实际情况来定。我做的项目有限,虽说在网上看到过webservice的使用场景,但是有些情况我并没有接触过,使用webservice的益处和弊端也不好下结论。如果以后有幸接触到使用webservice的其他的项目,我会再进行补充,更新此文章。当然如果大家有什么好的建议,欢迎在下面留言,大家共同探讨,共同进步。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
powershell 通过网络复制文件
发布时间:2024/02/05 浏览次数:221 分类:编程语言
-
本教程将教你使用 powershell 通过网络共享复制文件。powershell 是一个强大的工具,可让你从其命令行界面执行不同的文件和文件夹操作。
在批处理脚本中映射网络驱动器
发布时间:2023/08/14 浏览次数:607 分类:操作系统
-
本文将讨论如何在批处理脚本中映射网络驱动器。在批处理脚本中映射网络驱动器 为此,我们将看到同一命令的三种格式。 但是,命令的一般格式是:
java 调用 webservice
发布时间:2023/07/17 浏览次数:107 分类:java
-
本文将教我们如何从 java 类进行 soap webservice 调用。soap 网络服务 soap 代表简单对象访问协议。 可以通过这个基于 xml 的接口来访问 webservice。
使用 docker 网络主机命令
发布时间:2023/04/18 浏览次数:140 分类:docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
在 docker compose 中添加网络模式
发布时间:2023/04/17 浏览次数:899 分类:docker
-
默认情况下,单个网络由 docker compose 在我们的应用程序中创建,并将每个容器作为服务添加到那里。 网络上的每个容器都可以被单个网络上的容器访问和找到。
flask 网络套接字
发布时间:2023/03/27 浏览次数:171 分类:python
-
通过这个解释,我们将了解 websocket 是什么以及它是如何在客户端和服务器之间工作的。我们还将学习如何借助 flask 中的 flask_socketio 模块制作一个实时聊天应用程序。