最近在工作中遇到这样的一个项目(暂且定为项目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标签详细介绍,可以点击链接 https://www.jiyik.com/w/xml/xml-intro),因为上面我们说过,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的其他的项目,我会再进行补充,更新此文章。当然如果大家有什么好的建议,欢迎在下面留言,大家共同探讨,共同进步。

带你揭开WebSerivce的面纱的更多相关文章

  1. 【工作感悟】——揭开“PM”的面纱

    [前言] 上次跟大家分享了面试的故事,小编觉得效果还不错,因此小编决定把工作感悟系列写下去,不过时间就不好说了.希望小伙伴们在评论列表中发表自己的看法和观点,积极参与啦~~ [背景] 初来Y公司,作为 ...

  2. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  3. 10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱!

    原文链接:10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱! 你以为 Redis 这么快仅仅因为单线程和基于内存? 那么你想得太少了,我个 ...

  4. 云小课|带你揭开IP地址的神秘身份

    摘要:本文带你了解网络云产品和相关的知识内容. 华为云网络服务大家族提供了丰富的云产品,可以满足用户的各种网络互联需求.相应地,华为云帮助中心也贴心的奉上了你想了解的所有网络云产品知识. 可是小课最近 ...

  5. 揭开Docker的面纱

    开新坑了,开始挖坑Docker了,兄弟们.为什么需要Docker呢?Docker是什么?这里开始揭开Docker的面纱. 一.为什么需要Docker 可能每个开发人员都有一种困扰,软件开发完之后部署项 ...

  6. 带你揭开ATM的神秘面纱

    相信大家都用过ATM取过money吧,但是有多少人真正是了解ATM的呢?相信除了ATM从业者外了解的人寥寥无几吧,鄙人作为一个从事ATM软件开发的伪专业人士就站在我的角度为大家揭开ATM的神秘面纱吧. ...

  7. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!

    本月初微软官宣.NET 6 的RC1即将在11月正式发布,这意味着.NET6正式版跟我们见面的时间又近了一步.在之前的.NET6预览版本中,微软加入了大量新功能特性,而在最终版本中将不再额外加入新的内 ...

  8. 004 Linux 揭开神器 vim 面纱

    01 开篇初识 vim vim 功能吊炸天,但我们掌握一些常用的命令即可应对日常的使用了,不记流水账! Linux 中最常用的编辑器是什么? vim ! vi 跟 vim 啥区别? vim 就是 vi ...

  9. springmvc+hibernate入门-揭开神秘的面纱

            Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这 ...

随机推荐

  1. 如何系统学习C 语言(下)之 文件篇

    我们所编写的程序源代码以及编译生成的可执行文件都属于文件.所以文件的实质就是存储在外部存储介质上的一段连续的二进制数据. c 语言程序对文件的处理采用文件流的形式,程序运行在内存中,而文件是存储在外部 ...

  2. eclipse查看jar包源代码

    方法一:将jd-gui集成在Eclipse中 https://jingyan.baidu.com/article/b24f6c8275536686bfe5daed.html    下载2个反编译文件, ...

  3. 菜鸡的Java笔记 第三十二 - java 静态导入的实现

    静态导入的实现        为了理解静态导入的操作产生的动机,下面通过一个具体的代码来观察        范例:现在有一个 Import 的类,这个类中的方法全部都是 static 方法 packa ...

  4. UML常用建模工具简介,安装方法和各自的优点

    这学期学习了统一建模语言,自己初学时对各种建模工具十分陌生,各种名词都不懂,软件也都不了解,开始很是不知所措.为了防止其他初学者陷入我的困境,自己对各种工具进行了总结: Visio:介绍:Visio是 ...

  5. 用户案例 | 腾讯小视频&转码平台云原生容器化之路

    作者 李汇波,腾讯业务运维高级工程师,目前就职于TEG 云架构平台部 技术运营与质量中心,现负责微信.QQ社交类业务的视频转码运维. 摘要 随着短视频兴起和快速发展,对于视频转码处理的需求也越来越多. ...

  6. MYSQL数据库重新初始化

    前言 我们在日常开发过程中,可能会遇到各种mysql服务无法启动的情况,各种百度谷歌之后,依然不能解决的时候,可以考虑重新初始化mysql.简单说就是重置,"恢复出厂设置".重置之 ...

  7. [hdu7020]Array

    (这是一个线性的做法) 显然对于合法的区间,众数是唯一的,因此不妨枚举众数,将众数标记为1.其余数标记为-1,此时问题即求有多少个区间和大于0 考虑暴力的做法:从左到右枚举右端点,记当前前缀和为$to ...

  8. [loj3075]组合数求和

    Subtask1:​​​$m,nd\le 2\times 10^{3}$ 对$M$质因数分解,假设$M=\prod_{i=1}^{k}p_{i}^{\alpha_{i}}$(其中$p_{i}$为素数) ...

  9. [loj539]旅游路线

    考虑枚举加油的位置,当确定某次在第$i$个位置加油后,且下一次到$j$加油,那么$i$到$j$必然会选择不超过$c_{i}$条边且最长的路径,记作$d_{i,j}$ 如果能求出$d_{i,j}$,再设 ...

  10. [bzoj4943]蚯蚓排队

    询问相当于要求长度为k的公共子串个数,很容易联想到hash,由于询问是对全局的,因此对全局开一个hash的桶对于合并/删除操作,将中间新产生/需要删除的字符串暴力修改即可,单次复杂度最坏为$o(k^{ ...