Board logo

标题: REST Service 的最佳实践,第 1 部分 重新解析 REST Service-1 [打印本页]

作者: look_w    时间: 2018-2-21 14:55     标题: REST Service 的最佳实践,第 1 部分 重新解析 REST Service-1

三种流行 web 服务的架构Web 服务是一种面向服务的架构的技术,通过标准的 Web 协议提供服务,目的是保证不同平台的应用服务可以互操作。根据 W3C 的定义,Web 服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们通过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。流行的或者曾经流行的 Web 服务架构有三种:SOAP RPC over HTTP, XML RPC over HTTP, 和 REST over HTTP。下面分别简要介绍这三种架构。
SOAP RPC over HTTP简单对象访问协议(SOAP,全写为 Simple Object Access Protocol)是一种标准化的通讯规范,主要用于 (web service)中。SOAP 的出现是为了简化网页服务器(Web Server)在从 XML 数据库中提取数据时,无需花时间去格式化页面,并能够让不同应用程序之间透过 HTTP 通讯协定,以  格式互相交换彼此的数据,使其与编程语言、平台和硬件无关。
用一个简单的例子来说明 SOAP 使用过程,一个 SOAP 消息可以发送到一个具有 Web Service 功能的 Web 站点,例如,一个图书价格信息的数据库,消息的参数中标明这是一个查询消息,此站点将返回一个 XML 格式的信息,其中包含了查询结果。由于数据是用一种标准化的可分析的结构来传递的,所以可以直接被第三方站点所利用。
SOAP RPC over HTTP,在 HTTP 上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。SOAP 协议没有和 HTTP 有很好的结合,没有利用 HTTP 协议里面关于 request 和 response 的丰富词汇,而是鼓励应用设计人员定义任意的词汇(动词和名词),像 getUsers(),savePurchaseOrder(...),getBookPrice() 等。SOAP RPC Request 通过 HTTP POST 请求发送。清单 1 和清单 2 给出了 SOAP RPC over HTTP 的 request 和 response 的示例。请求和响应是封装在 SOAP Envelope 里面,以 HTTP request 和 response 的 body 传送。
  清单 1. A SOAP Request over HTTP 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /books/bookquery HTTP/1.1
Host: www.Monson-Haefel.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnn
SOAPAction=""

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mh="http://www.example.com/books">
  <soap:Body>
     <mh:getBookPrice>
         <id>123456</id>
     </mh:getBookPrice>
  </soap:Body>
</soap:Envelope>




从清单 1 可以看出,soap envelope 是定义好的格式,它描述所要调用的方法和方法所需要的参数及其参数值,在 HTTP 上,它作为 HTTP request 的 body 发送。
清单 2. A SOAP response over HTTP 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/1.1 200 OK
Content-Type: text/xml; charset='utf-8'
Content-Length: nnn

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mh=" http://www.example.com/books" >
  <soap:Body>
     <mh:getBookPriceResponse>
         <result>24.99</result>
     </mh:getBookPriceResponse>
  </soap:Body>
</soap:Envelope>




从清单 2 可以看出,soap envelope 封装了 getBookPrice 的调用结果,在 HTTP 上,它作为 HTTP response 的 body 返回回来。
XML RPC over HTTPXML RPC over HTTP 和 SOAP RPC over HTTP 从结构上看很类似。这种远程过程调用使用 HTTP 作为传输协议,XML 作为传送信息的编码格式。XML-RPC 的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。XML-RPC 是工作在 Internet 上的远程过程调用协议。一个 XML-RPC 消息就是一个请求体为 XML 的 HTTP POST 请求,被调用的方法在服务器端执行并将执行结果以 XML 格式编码后返回。清单 3 和清单 4 给出了 XML RPC over HTTP 的 request 和 response 的示例。请求和响应是封装在一个固定的格式里面,以 HTTP request 和 response 的 body 传送。
清单 3. A XML RPC Request over HTTP 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST /books/bookquery HTTP/1.1
Host: www.Monson-Haefel.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnn
Connection:keep-alive

<?xml version="1.0"?>
<methodCall>
  <methodName>getBookPrice</methodName>
  <params>
     <param>
        <value><string>123456</string></value>
        </param>
  </params>
</methodCall>




从清单 3 可以看出,methodcall 是定义好的 XML 格式,它描述所要调用的方法和方法所需要的参数及其参数值,在 HTTP 上,它作为 HTTP request 的 body 发送。
清单 4. A XML RPC response over HTTP 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/1.1 200 OK
Content-Type: text/xml; charset='utf-8'
Content-Length: nnn
Connection: close

<?xml version="1.0"?>
<methodResponse>
  <methodName>getBookPrice</methodName>
  <params>
     <param>
        <value><double>24.99</double></value>
        </param>
  </params>
</methodResponse>




从清单 4 可以看出,methodResponse 封装了 getBookPrice 的调用结果,在 HTTP 上,它作为 HTTP response 的 body 返回回来。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0