接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍。

1.什么是webservice

1.1什么是服务(service)

计算机的服务一般指的就是计算机能提供的某一功能,比如qq能提供聊天服务,杀毒软件能提供杀毒服务。而通常情况我们把服务分为两大类,分别是本地服务(本地提供,不需要通过网络获取)和网络服务(即webservice,需要通过网络获取)。

接下来我们简单比较下这两种服务。

本地服务 网络服务
实现方式 利用本地资源实现,需要掌握实现方式 通过网络获取,不需要知道怎么实现
实现成本 需要自己承当人力物力,成本较高 只需要远程调用,成本较低
稳定性 自己实现,自己维护,稳定性相对较高,且不依赖互联网,断网风险小 依赖互联网,服务出现问题维护相对较麻烦,但成本不一定高
移植性 较差,换个系统要实现改服务要重新开发 较好,可以快速移植

图表的内容可能比较抽象,我们不妨举个例子来体会下。

  • 假设我们要实现一个天气预报的服务,如果我们采用本地服务,首先我们得发送一个气象卫星,然后我们还要能接收并处理卫星数据的设备,有了数据之后我们有专门的科学家分析这些数据,然后通过工程师用图表的形式展示出来。

  • 如果我们采用网络服务,我们只需要调取气象中心的接口,就可以得到气象服务。
  • 假设有一天我们发现调用的接口传回的数据不对,如果我们是本地服务,我们马上可以组织人手排查问题,但如果是网络服务,我们就得依靠气象中心来解决问题,而且如果有一天网络出现故障,我们也会面临无法获取气象数据的问题。
  • 如果某天公司业务要拓展,我们需要在一个新环境下实现气象服务,如果是本地服务,我们又得重新去实现一遍。而如果是网络服务,我们只需要把接口重新在新环境下调用即可。

因此,我们可以发现,本地服务的实现成本会远高于网络服务。特别是对于那些非核心的服务,如果我们都要亲力亲为去自己实现,无疑会增加自己的负担。同时本地服务的移植性也不如网络服务,因此网络服务就成为一个异常重要的发展方向。

1.2什么是网络服务(webservice)

如上文所说,网络服务(webservice)就是将某一服务通过互联网发布并被用户所获取的某一计算机功能。如前面说的气象服务,比较常见的还有微信公众号开发时我们可以调用的各种接口(如自动回复、支付、识别发送的信息类型等接口),腾讯地图提供的地图接口,支付宝提供的支付接口等等。这些网络服务加上我们本地的核心功能共同构成了一个完整的系统。

如果一个软件的主要部分采用了"网络服务(webservice)",即它把存储或计算环节"外包"给其他网站了,那么我们就说这个软件属于Web Service架构。

Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。

webservice优势

  • 平台无关。不管你使用什么平台,都可以使用Web service。

  • 编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。这大大增加了web service的适用性,降低了对程序员的要求。`

  • 对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。

  • 对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情。

2.webservice相关技术

2.1webservice的实现原理

2.1.1概述

广义上的Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。

但是现 在我们说webservice一般是指XML Web Service WebService。它是通过soap在web上提供的软件服务,用wsdl进行描述,并通过uddi进行注册。

  • XML(Extensible Markup Language):扩展型可标记语言,用于数据的传递,是soap的基础。
  • SOAP(Simple Object Access Protocol):全称简单对象访问协议,是一种基于xml的轻量协议。当用户通过UDDI找到wsdl描述文件后,可以通过soap调用服务的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
  • WSDL(Web Services Description Language):webservice描述语言,本质是一个xml文档,用于说明soap消息以及如何交换这些消息,一般由软件自动生成和使用。
  • UDDI(Universal Description, Discovery, and Integration):是一种目录服务,企业通过它对webservice进行注册和搜索

2.1.2调用原理

webservice之所以能够实现跨平台跨语言之间的调用,是因为它定义了一个统一的信息交互和调用的标准。正如上文所说,webservice的实现需要依赖几个重要的技术:XML,soap,wsdl和uddi。

webservice最关键的一环就是soap,即把数据以xml的形式组合起来,然后通过http协议与远程服务进行通信,我们把用xml组合的数据格式统一,称为soap消息,这就成了我们跨平台跨语言通讯的关键。

当然不得不承认,soap格式的报文存在严重的冗余,并且依赖定义好的xml schemas,我们如果手动创建soap消息会特别麻烦,需要借助一些工具来简化一些工作,因此现在很多webservice的开法越来越趋向于restful风格的webservice。

如图所示,一个完整的webservice过程可以概括为以下步骤:

  1. web服务提供者开发完成服务后通过web服务中介者发布服务,并通过服务注册中心(一般为UDDI)注册(发布)
  2. web服务请求根据自己的需求向web服务中介者提出请求,web服务中介者会根据请求在UDDI注册中心找到满足要求的服务(发现)
  3. web服务中介者会向web服务请求者发布web服务的描述信息,这些信息一般是通过wsdl写成的,wsdl可以通过大部分浏览器来直接阅读(发现)
  4. web服务请求者根据wsdl信息编写相应的soap消息,然后发给web服务提供者,来调用相应的web服务(绑定)
  5. web服务提供者会根据soap消息执行相应的服务,并把调用结果发送给web服务请求者(绑定)

2.1.3调用方法

webservice除了httpsoap调用,也可以用get和post方法来调用,但是soap可以传递结构化的数据,而post和get方法不行。

在java web中,我们要调用webservice,通常是要先利用相应框架(如axis2等)生成webservice的对应client,然后通过调用client里面的相关方法来实现对webservice的调用。

2.2webservice相关框架

webservice一个最大的特点就是与语言无关,所以webservice用什么语言开发其实都可以。现在用的比较多的是c#和java,这里我们主要介绍java关于webservice的开发。

java开发web service的框架常见的有Axis,axis2,Xfire,CXF以及JWS,其中axis2和cxf是目前最为常用的框架。axis2可以看作是一个小型的应用服务器,相对来说会比较重,但是它功能强大,支持多语言,在大型项目被较多地使用。

2.3webservice未来发展趋势

  1. 通信协议会倾向于使用更轻量级的rest,而逐渐减少对RPC和soap的使用
  2. 通过上文的介绍,我们会发现现在webservice用于描述接口信息的wsdl以及传递信息的soap报文都是基于xml,而这些xml一般都会有比较复杂的格式定义,未来可能会使用更加轻量级的json来进行数据交互。
  3. 第三点其实也是对一条的补充,未来网络接口会更倾向于restful风格的设计,更轻量,对服务的请求不必再在第三方应用中中转,而是直接在浏览器中请求。

转载于:https://www.cnblogs.com/MarsCheng/p/7217553.html

第一篇:webservice初探相关推荐

  1. 【实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!

    目录 [实战HTML5与CSS3 第一篇]初探水深,美丽的导航,绚丽的图片爆炸!! [实战HTML5与CSS3 第二篇]绚丽的快速导航! [实战HTML5与CSS3 第三篇]我第一个HTML5网页诞生 ...

  2. 实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!

    [实战HTML5与CSS3 第一篇]初探水深,美丽的导航,绚丽的图片爆炸!! [实战HTML5与CSS3 第二篇]绚丽的快速导航! [实战HTML5与CSS3 第三篇]我第一个HTML5网页诞生了(提 ...

  3. ETL第一篇(Kettle Spoon) 初遇

    ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 简介 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移 ...

  4. b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释

    b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释 继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更 ...

  5. 属于窄带噪声的是热噪声_时钟201系列: 非相位噪声的情况 (第一篇)

    欢迎来到Silicon Labs(亦称"芯科科技")的新系列博客文章"时钟201"的第一篇内容-非相位噪声的情况-第一部分.我们之前的系列博文"时钟1 ...

  6. linux的自定义input,Linux Input子系统之第一篇(input_dev/input_handle/input_handler)

    Input子系统是linux kernel中与部分外围器件驱动联系比较紧密的模块,常用于Sensor,TP(touch panel),power key等器件的驱动.这类模块有个共同特点:字符设备,且 ...

  7. 第一篇文章,做个纪念

    第一篇文章,做个纪念,这个blog好吗?拭目以待! 转载于:https://blog.51cto.com/197536/88241

  8. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  9. 研究生第一篇科研论文常犯问题总结

    ↑ 点击蓝字 关注视学算法 作者丨喻海良,中南大学教授,博士生导师 来源|http://blog.sciencenet.cn/blog-117889-1018759.html 极市导读 本文作者为中南 ...

  10. Webpack系列-第一篇基础杂记

    系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...

最新文章

  1. 06Chrome调试工具
  2. 2.2.2 进程调度的 时机 切换与过程 调度方式
  3. 【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》
  4. mysql already closed._java.sql.SQLException: Already closed.
  5. 在Java应用程序中使用密码学
  6. 腾讯内部转岗_别了,腾讯微博!
  7. Python脚本提取氨基酸序列的 因子复杂度
  8. 百度地图开发入门(6):3D建筑
  9. 【转】常用单位换算表
  10. 如何实现微信小程序的选项卡
  11. 2.文献研读---基于学生成绩多变量数据挖掘的学习行为分析--单耀 王艺岚 张家华...
  12. “期货投资管理”的资管软件开发都需要用到什么开发语言和环境
  13. 计算机机房管理系统数据库设计入门经典,机房管理系统数据库设计
  14. 光功率 博科交换机_希望查询7604,CE3000等交换机读取光口光功率的oid,以及电源状态的oid...
  15. 堪称神级的Java技术栈手册火了!
  16. 射影几何----二阶曲线可由曲线上任意两点生成画法
  17. miRanda-通过circRNA的sequence来预测靶向的miRNA
  18. python实现发送和获取手机短信验证码
  19. 【调试工具】Windows和Android端测试工具 - iperf3
  20. 华人科学家发现第四种传热方式!真空声子传热将改写物理教科书

热门文章

  1. R|数据处理|merge数据详解
  2. OpenSSH服务及其相关应用
  3. struts2 + spring + mybatis 框架整合
  4. ios开发 将json格式数据上传服务器
  5. 利用递归分割(Split)字符串
  6. Debian下Oracle10g的安装
  7. docker+阿里云镜像容器进行环境的备份与获取
  8. android:“新版飞机大战”源码开源啦!
  9. OS X中的bundle
  10. NOIp 2014 #5 解方程 Label:数论?