接触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风格的设计,更轻量,对服务的请求不必再在第三方应用中中转,而是直接在浏览器中请求。

第一篇:webservice初探的更多相关文章

  1. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  2. 使用WSE实现Web Service安全----我的第一篇

    原文:使用WSE实现Web Service安全----我的第一篇 WSE(Web Services Enhancements)是微软为了使开发者通过.NET创建出更强大,更好用的Web Service ...

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

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

  4. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

    ​ ​本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章 ​ 一.网站架构演变过程 1-1.传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数 ...

  5. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  6. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  7. Three.js 第一篇:绘制一个静态的3D球体

    第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...

  8. 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器

    × 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. 网络编程应用:基于TCP协议【实现文件上传】--练习

    要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...

  2. 在linux下利用信号量实现一个写者线程多个读者线程

    #include<pthread.h> #include<string.h> #include<stdlib.h> #include<stdio.h> ...

  3. (原创)Python 自动化测试框架详解

    自己折腾了一个python的自动化测试框架,梳理了一下流程,简单分享一下. 项目背景 B/S架构,进行用户界面的自动化测试 工具选择 python开发的自动化测试框架,足够灵活,可以随时根据需求进行变 ...

  4. 推荐xamlspy

    xamlspy(http://xamlspy.com/) 如果在win32时代用过spy++的,都应该在silverlight/wpf时代用一下xamlspy,让你重新找到用spy++看别人程序的UI ...

  5. pb传输优化浅谈

    在正式切入今天要谈的优化之前,先碎碎念一些自己过去这几年的经历.很久没有登录过博客园了,今天也是偶然兴起打开上来看一下,翻看了下自己的随笔,最后一篇原创文章发布时间是2015年的4月,今天是2017年 ...

  6. vscode中使用markdown

    vscode中使用markdown vscode 是微软推出一款轻量级的文本编辑工具,类似于sublime,由于其拥有丰富的插件,安装使用也非常简单,所以深受广大程序员的喜爱. markdown 是一 ...

  7. nginx反向代理cas server之1:多个cas server负载均衡配置以及ssl配置

    系统环境采用centOS7 由于cas server不支持session持久化方式的共享,所以请用其他方式代替,例如:组播复制. 为什么不支持session持久化:http://blog.csdn.n ...

  8. Bash内置命令

    Bash有很多内置命令,因为这些命令是内置的,因此bash不需要在磁盘上为它们定位,执行速度更快. 1)列出所有内置命令列表$enable 2)关闭内置命令test$enable -n test 3) ...

  9. ListView实现下拉刷新和上拉加载功能

    1 public class RefreshListView extends ListView implements OnScrollListener { private View mHeaderVi ...

  10. document事件及例子

    一.关于鼠标事件:onclick:鼠标单击触发 ondbclick:鼠标双击触发 onmouseover:鼠标移上触发 onmouseout:鼠标离开触发 onmousemove:鼠标移动触发 二.关 ...