12.3. 步入 SOAP

调用远程函数是 SOAP 的核心功能。有很多提供公开 SOAP 访问的服务器提供用于展示的简单功能。

最受欢迎的 SOAP 公开访问服务器是 http://www.xmethods.net/。这个例子使用了一个展示函数,可以根据美国邮政编码返回当地气温。

例 12.6. 获得现在的气温

>>> from SOAPpy import SOAPProxy            1
>>> url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'
>>> namespace = 'urn:xmethods-Temperature'  2
>>> server = SOAPProxy(url, namespace)      3
>>> server.getTemp('27502')                 4
80.0
1 你通过 SOAPProxy 这个代理 (proxy) 类访问远程 SOAP 服务器。这个代理处理了所有的 SOAP 内部事务,其中包括:根据函数名和参数列表创建 XML 请求文档,并将这个请求文档通过 HTTP 发送到远程 SOAP 服务器;解析 XML 返回文档,并创建本地的 Python 返回值。在下一节中你将看到这个 XML 文档。
2 每个 SOAP 服务都有一个 URL 用以处理所有请求。相同的 URL 可以用于所有的函数请求。每个特定服务则只有一个函数。但稍后你将看到的 Google API 却有多个函数。这个服务的 URL 提供给所有函数分享。每个 SOAP 服务都有一个命名空间 (namespace),这个命名空间是由服务器任意命名的。这不过是为调用 SOAP 方法设置的。它使得服务器让多个不相关的服务共享服务 URL 和路径请求成为可能。这与 Python 中模块相对于的关系类似。
3 这里你创建了包含服务 URL 和服务命名空间的 SOAPProxy。此时还不会连接到 SOAP 服务器;仅仅是建立了一个本地 Python 对象。
4 到此为止,如果你的设置完全正确,应该可以向调用本地函数一样调用远程 SOAP 方法。这和给普通函数传递参数并接收返回值一样,但在背后却隐藏着很多的工作。

让我们看一看这些背后的工作。