最近在工作中遇到这样的一个项目(暂且定为项目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. js深拷贝你还不会吗

    js深拷贝 在讲正题之前我们要先了解数据存储的方式 数据存储方式 在讲之前我们要先知道值类型和引用类型的存储方式. 在JavaScript数据类型中有两种数据类型. 值类型:字符串(String).数 ...

  2. Django笔记&教程 5-3 综合使用示例

    Django 自学笔记兼学习教程第5章第3节--综合使用示例 点击查看教程总目录 1 - 生成学号场景 场景描述: 教务管理系统中,学生注册账号,学生选择年级后,生成唯一学号. 细节分析: 学生学号由 ...

  3. Spark面试题(八)——Spark的Shuffle配置调优

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...

  4. 记一次 IIS 站点配置文件备份和还原,物理路径文件批量备份

    前言 上一篇文章实现了数据库的批量备份和还原,当然部署在服务器中的IIS站点备份也是一个十分繁琐的事,三四个数量不多的还好,像有一些服务器用了许久,承载几十个站点甚至更多,一个一个备份,再一个一个还原 ...

  5. C#长程序(留着看)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 宝藏好物gRPCurl

    宝物简介 grpcur是一个与grpc服务器交互的命令行工具,可认为是gRPC的curl工具. grpcurl用于从命令行调用gRPC服务器支持的RPC方法,gRPC使用二进制编码(protobuf) ...

  7. could not extract ResultSet

    使用jpa进行代码更新:update的时候发现代码出现了异常:could not extract ResultSet 在数据库看数据并没有更新,后发现更新操作需要加一个注解 注释:当设置nativeQ ...

  8. 痞子衡嵌入式:深扒IAR启动函数流程之段初始化实现中可用的压缩选项

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程里段初始化实现中可用的压缩选项. 接着 <IAR启动函数流程之段初始化函数__iar_data_init3实现& ...

  9. Codeforces 566C - Logistical Questions(点分治)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%% 首先考虑对这个奇奇怪怪的 \(t^{3/2}\) 进行一番观察.考虑构造函数 \(f(x)=ax^{3/2}+b(d-x) ...

  10. Codeforces 571D - Campus(并查集+线段树+DFS 序,hot tea)

    Codeforces 题目传送门 & 洛谷题目传送门 看到集合的合并,可以本能地想到并查集. 不过这题的操作与传统意义上的并查集不太一样,传统意义上的并查集一般是用来判断连通性的,而此题还需支 ...