什么是web services?

引言:随着互联网的高速发展,互联网通信协议的完善和计算机高级语言的发展,各种工程层出不穷。你可能不知道web services,本文将为你介绍web services,你将又增加一个知识点。

       本文分三部分:web services的定义,web services的协议,web services的应用介绍。

       一.什么是web services

        这是文章的题目,但我保证,这只是吸引你来看文章的一个诱饵。什么是web services?只要是在互联网的,可以为人们提供一项功能的组件就是web services。当然这句话是我定义的,因为至今没有一个对web services有统一的定义。你也可以认为,一个超级链接就是一个web services,一个HTML网页就是一个web services。。。。。!很简单?你错了,web services虽然没有定义,但是它的应用功能绝不仅限于这么单一的调用。其中一个最大的应用就是跨语言,跨系统,分布式的组件应用。有人会问,什么是组件,您姑且认为这是一个有特定功能的程序。

       总结:web services 是互联网上的一个组件,为人们提供一项或者多项功能。

      二.web services的协议

       在第一部分中,我已经引出了web services可以有复杂的应用。那么这是如何实现的呢,能举一个例子么?虽然第二部分的题目是web services的协议,但我还是很乐意为你效劳,因为实际的例子更容易让你体会到什么是web services!下面就为你提供一个例子!

      我们知道,天气预报的实现需要多颗卫星,多台超级计算机,那么像www.hao123.com,新浪,搜狐,QQ首页面上等都提供了天气预报的功能,难道他们都有自己的卫星,多台超级计算机计算?答案是否定的,他们没有。

      他们仅仅是利用了国家一个气象局(我不肯定是气象局)创建的一个用JAVA语言写的天气预报 web services。

     比如QQ聊天软件,怎么能在页面显示出气象数据呢?比如:5月1日,浙江杭州,天气晴到多云。QQ软件程序员就是调用了气象局发布的天气预报的web services,使用到了web services所提供的接口。这个接口好比是一个类或者一个函数(您完全可以理解为这个接口就是一个类,这个类就是提供天气预报的)。然后QQ聊天软件调用类中的函数,比如显示地区的函数,显示天气的函数,显示日期的函数,然后将数据显示在QQ聊天软件的页面中,这就能被我们看见天气预报的数据了。www.hao123.com,新浪,搜狐也是一样的道理。

      你太聪明了,你一定想到QQ用的是C++语言,那www.hao123.com这个网页用的是PHP语言,而新浪是用jsp语言,怎么一个web services能被不同的语言调用啊?

     这就需要引入XML语言和HTTP协议了。

     您一定知道HTTP协议,因为没有它您将看不到这文章,您可能知道XML语言,但或许不了解XML语言,那么我给你介绍下吧。XML语言是一种通用的,自己定义的语言的。比如:你可以将一个程序代码用XML来定义。

    比如:  我有一个JAVA语言的小程序



      public class MyPlus{

              public int plus(int x){

                  

                         return x+5;

              }

         }



我可以将上述JAVA代码用XML语言表示:

    XML类:类的类型--------public

                类名------MyPlus

   XML函数:函数类型-----public

                      返回值类型------int

                       函数名-----------plus

                      函数的传人参数类型:int

                 函数的传入参数名:x

              函数的业务逻辑:无

         函数的返回值:x+5



      您按照上面的XML语言,一定能写出PHP,C#,C++的任何一种语言的程序,这个程序的功能和JAVA语言写的程序的功能一摸一样。

我为你的理解力感到骄傲。当然,XML有自己的定义标准,我上面写的XML是错误的,对不起,我为我的不严谨为你道歉,因为我不会写XML,只是处在理解XML的水平。但我向你保证,XML语言在web  services就是这样的功能。

    你现在可以理解:比如天气预报的程序是用JAVA语言写的,然后将程序的JAVA语言翻译成XML语言,QQ软件的程序员看到XML语言,将其翻译为C++语言,创建C++程序,那么就可以使用C++程序的功能,这个功能和那个JAVA程序的功能一摸一样。XML语言好比计算机语言中的世界语言,大家都看的懂。

     我为你的思考感到骄傲。你一定会想,如果电脑都不连接上网,即使将JAVA语言写的天气预报程序,通过XML语言翻译为QQ软件的C++程序,那一定不能用的嘛。非常正确,所以这就需要HTTP协议的帮助了。

     XML+HTTP结合就是web services的协议,名字叫SOAP协议。我不敢肯定还没有其他类似的协议,但是我们现在用的就是这个协议。现在我们回到气象局,去重新体会下web services的产生的过程:

     1.气象局有卫星和超级计算机,算出浙江杭州,5月1号,天气晴到多云,用JAVA语言写了如下程序:



public class QiXiang{

   public  void getTianQI(){



       return  浙江杭州,5月1号,天气晴到多云;

  }

}



        气象局的程序员将这个程序代码翻译为XML语言,然后通过HPPT打包,部署到web services服务器上。(气象局的程序员发布了web  services)

          QQ软件的程序员通过HTTP+XML,发现XML语言,将XML语言翻译为C++语言(很遗憾,我对C++不熟悉,翻译不了为C++代码,如果你会,请为我留言翻译下代码,谢谢!),这样就可以用了。当然了,现实中的数据传输会更加复杂,这涉及到很多问题。

        您可以将XML+HTTP的包成为WSDL,比如 http://10.21.237.120:8887/server2.wsdl 这个就是XML+HTTP域名,下面的代码就是这个wsdl的代码

<definitions targetNamespace="HelloWorldService.HelloWorldService" name="HelloWorldService">
?
<types>
?
<schema targetNamespace="HelloWorldService.HelloWorldService">
<xs:element name="say_hello" type="tns:say_hello"/>
?
<xs:complexType name="say_hello">
?
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="times" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:element name="stringArray" type="tns:stringArray"/>
?
<xs:complexType name="say_helloResponse">
?
<xs:sequence>
<xs:element name="say_helloResult" type="tns:stringArray"/>
</xs:sequence>
</xs:complexType>
?
<xs:complexType name="stringArray">
?
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" type="tns:string" name="string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="say_helloResponse" type="tns:say_helloResponse"/>
</schema>
</types>
?
<message name="say_hello">
<part name="say_hello" element="tns:say_hello"/>
</message>
?
<message name="say_helloResponse">
<part name="say_helloResponse" element="tns:say_helloResponse"/>
</message>
?
<portType name="HelloWorldService">
?
<operation name="say_hello" parameterOrder="say_hello">
<documentation/>
<input name="say_hello" message="tns:say_hello"/>
<output name="say_helloResponse" message="tns:say_helloResponse"/>
</operation>
</portType>
?
<plnk:partnerLinkType name="HelloWorldService">
?
<plnk:role name="HelloWorldService">
<plnk:portType name="tns:HelloWorldService"/>
</plnk:role>
</plnk:partnerLinkType>
?
<binding name="HelloWorldService" type="tns:HelloWorldService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
?
<operation name="say_hello">
<soap:operation soapAction="say_hello" style="document"/>
?
<input name="say_hello">
<soap:body use="literal"/>
</input>
?
<output name="say_helloResponse">
<soap:body use="literal"/>
</output>
</operation>
</binding>
?
<service name="HelloWorldService">
?
<port name="HelloWorldService" binding="tns:HelloWorldService">
<soap:address location="http://10.21.237.120:8887/server2"/>
</port>
</service>
</definitions>

您一定翻译不了是什么意思,但是我们很幸福,现在的IDE都集成了各个语言对WSDL的翻译。比如JAVA的axis包,python的soaplib模块等。

看到了吗,这就是WSDL,HTTP+XML打包而形成的。

     您真是太厉害了,居然问出:QQ程序员怎么去发现WSDL的啊???这个就web  services  软件体系架构中的UDDI平台。气象局的程序员将wsdl发布到UDDI平台上(刚才不是写web services发布呢?只是称呼不同而已,不必纠结于此),这个UDDI平台上会显示天气预报web 服务的WSDL域名,以及接口等信息.QQ软件程序员去这个UDDI平台上找,找啊,找啊,找到天气预报的web 服务的域名(WSDL的域名比如 http://10.21.237.120:8887/server2.wsdl),这样就可以知道XML语言了。

    你懂了么?这就是web serices创建到发布到调用到使用的过程。

你一定对UDDI很陌生,这个是公共服务平台,大家都可以去的,免费的,不要钱的,你也完全可以自己的建这样一个平台,这取决于你的所想。你也可以建一个收费的UDDI公平平台。



         总结:SOA架构中的web services的协议以及UDDI,WSDL的介绍。



三:web services的应用介绍

        这还有我说嘛?同一个程序,可以被多人次,多地点,多系统的使用,犹如你在自己的计算机上使用自己创建的类一样。这是多么爽的事情。当然,要使用web services的,一定要记得先连接网络哦。

      总结:web services的应用介绍。







                                                                         

                                                                                                                                                                    Endual提供,(*^__^*)     

猜你喜欢

转载自endual.iteye.com/blog/1025138