初探WebService

在做Web工程的时候可能需要会使用到远程对象的传输,这个时候WebService就派上用场了,举一个最简单 的例子,就是开发一个消息中间件时服务器需要将消息发送给中间件,当然这个中间件是基于Web的,使用Http 协议,如果消息是一个有内部结构的对象,我们就需要使用WebService来完成任务。构建WebService一般有 两种选择一种是基于SOAP协议的,一种是REST风格的,下面我们就来说一说这两者的特点。

SOAP

我们通常所说的WebService是基于SOAP的,全称是简单对象访问协议(Simple Object Access Protocol)。 简单地说SOAP=RPC+HTTP+XML,RPC对于一般的JavaWeb程序员应该都不会陌生,它是一个远程过程调用协议。

  • 什么是RPC?

    从它的中文解释就可以得知一二了,无非就是调用远程服务端的函数或是方法,然后将结果返回给 本地。RPC采用客户机/服务器模式,请求程序就是一个客户机,而服务提供程序就是一个服务器。首先, 调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠 状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息, 然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果。

  • WebService如何使用SOAP?

    WebService一般就是通过http来使用SOAP协议的。这里我们不得不提到WSDL(网络服务描述语言, Web Services Description Language),这是一门基于XML的语言,它描述WebService及如何访问它。所以 SOAP的请求是通过WSDL来描述的,它使用基本的XML来描述对象(Java)及访问方式,这些都是是SOAP协议 的定义范围。WebService都是放在Web服务器 (如IIS) 后面的,客户端生成的SOAP请求会被嵌入在一个 HTTP POST请求中,发送到Web服务器。Web服务器再把这些请求转发给WebService请求处理器,请求处理 器的作用在于,解析收到的SOAP请求,调用WebService,然后再生成相应的SOAP应答。Web服务器得到 SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。

    其实这一个过程就是一个RPC(远程调用),只是使用SOAP去规范了一下。

    SOAP协议推出的时候并没有WSDL,它只是使用XML来表示数据格式,定义了一整套复杂的标签,以 描述调用的远程过程、参数、返回值和出错信息等等。而且随着需要的增长,又不得增加协议以支持安 全性,这使SOAP变得异常庞大,背离了简单的初衷。另一方面,各个服务器都可以基于这个协议推出自 己的API,即使它们提供的服务及其相似,定义的API也不尽相同,这些不一致性导致了WSDL的诞生。 WSDL也遵循XML格式,用来描述哪个服务器提供什么服务,怎样找到它,以及该服务使用怎样的接口规范。 有了WSDL,就可以使用统一的格式来描述SOAP请求。

REST

REST是后面出来的概念,我当初做本科毕设的时候就要求使用REST,当时搞了很长时间还是对这个概念 模模糊糊。REST使得我们去用资源的观点去看待和定义Web,它只是一种风格,并不是一个协议或者一个 标准,所以我们没法向阅读协议一样去找到精确的定义和方法。现在的网站一般都是宣称自己是基于REST 架构的,但是实现的方式各异,但是精髓是不变的。

  • 何为REST?

    REST认为我们传输对象没必要搞得像SOAP那样复杂,所有的操作都可以使用http这个简单的协议来 完成。其实HTTP协议就是对REST的最好诠释,http有四种最基本的请求方式GET、PUT、POST、DELETE,基于 REST架构的Web将数据都抽象成资源,URI就是定位各个资源的资源描述符,而http的这四种方式即是对 资源的查、改、增和删,包含了对资源操作的全部内容,所以REST使用HTTP将Web的架构变得如此的简单 而直观。

    举一个简单的例子来描述REST,比如说我们查询一条Web记录,普通的方式是我们发送http请求,这个 请求对应一个动作,然后Web服务器去查询数据库,再将记录返回给浏览器,这整个过程的重点在对应的 那个处理动作(即处理逻辑),但是REST的方法就明显不同了,它发送的http请求通过URI直接对应到了数据 库中的记录,然后分析method如果是GET,则获取,如果是POST则将http中的内容追加进去,所以这个过程 的重点在于URI和Http Method。

从现在的趋势看来,REST的方式更受开发者青睐,但是REST毕竟只是一个风格的宽泛定义,没有像协议那 样定义得这么明确,单从抽象成资源这一层来说就很难把握,而且没有像SOAP那么成熟,所以在选择的 时候还是得看场景说话。但是就凭REST的高效简洁易用这一点,我们就应该关注它。



Previous     Next
zhing /
Published under (CC) BY-NC-SA in categories Web  tagged with Web