第一篇:webservice初探
接触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过程可以概括为以下步骤:
- web服务提供者开发完成服务后通过web服务中介者发布服务,并通过服务注册中心(一般为UDDI)注册(发布)
- web服务请求根据自己的需求向web服务中介者提出请求,web服务中介者会根据请求在UDDI注册中心找到满足要求的服务(发现)
- web服务中介者会向web服务请求者发布web服务的描述信息,这些信息一般是通过wsdl写成的,wsdl可以通过大部分浏览器来直接阅读(发现)
- web服务请求者根据wsdl信息编写相应的soap消息,然后发给web服务提供者,来调用相应的web服务(绑定)
- 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未来发展趋势
- 通信协议会倾向于使用更轻量级的rest,而逐渐减少对RPC和soap的使用
- 通过上文的介绍,我们会发现现在webservice用于描述接口信息的wsdl以及传递信息的soap报文都是基于xml,而这些xml一般都会有比较复杂的格式定义,未来可能会使用更加轻量级的json来进行数据交互。
- 第三点其实也是对一条的补充,未来网络接口会更倾向于restful风格的设计,更轻量,对服务的请求不必再在第三方应用中中转,而是直接在浏览器中请求。
第一篇:webservice初探的更多相关文章
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
- 使用WSE实现Web Service安全----我的第一篇
原文:使用WSE实现Web Service安全----我的第一篇 WSE(Web Services Enhancements)是微软为了使开发者通过.NET创建出更强大,更好用的Web Service ...
- ETL第一篇(Kettle Spoon) 初遇
ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 简介 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移 ...
- Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览
本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章 一.网站架构演变过程 1-1.传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数 ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
× 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- 生成JSON数据--Gson(谷歌)方法
Gson生成JSON数据方法: 创建相应的类,然后创建对象,toJson()进去就可以了 要求:生成如下JSON数据 1.{"age":4,"name":&qu ...
- python基础操作_元组_字典操作
#元组'''元组是不可变的列表,不能改.取值和列表一样'''tp=(1,2,3)tp1=('127.0.0.1','3307')#元组只有count 和index两个方法.lis=['127.0.0. ...
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- Spring学习(22)--- AOP之Advice应用(下)
(六)Advice parameters(advice带参数的情况) 例子: 修改MyAspect(添加around_init方法): package com.aop.schema; import o ...
- io-nio 区别示意图
no:一个线程管理多个连接请求并且一个线程在处理事情,需要一个一个处理连接. nio:由一个 bOSS 线程连接分发,分发至每个工作线程,工作线程接收到请求后直接负责连接任务的处理,多线程任务处理机制 ...
- 写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)
今天写代码用python处理完数据,传给php服务器后,发现接收不到数据,因为是跨域,所以加了消息头:header('Access-Control-Allow-Origin:*');但是并没有什么卵用 ...
- PHP完成一个日历
今天我们就用php中的数组合date 做一个日历. 先让我们回顾一下PHP里面的date . 1.时间戳:表示从计算机元年/UNIX纪年(0时区 1970/1/1 00:00:00)到当前事件的秒数. ...
- Go 从入门到精通(三)字符串,时间,流程控制,函数
一.strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirn ...
- PHP设计模式:抽象工厂
示例代码详见https://github.com/52fhy/design_patterns 抽象工厂 抽象工厂(Abstract Factory)是应对产品族概念的.比如说,每个汽车公司可能要同时生 ...
- Jquery Ajax 保存
Jquery Ajax 保存: $.ajax({ type: "POST", async:false, url: "${ctx}/url", data: {pI ...