WEB开发网
开发学院软件开发Python Python Web 服务开发者: 针对 Python 的 XML-RPC 阅读

Python Web 服务开发者: 针对 Python 的 XML-RPC

 2007-03-29 12:24:08 来源:WEB开发网   
核心提示: XML-RPC 服务器Python 还附带 SimpleXMLRPCServer ,它是一个用来实现 XML-RPC 服务器的模块,Python Web 服务开发者: 针对 Python 的 XML-RPC(5),要公开 XML-RPC 服务,您可以向 SimpleXMLRPCServer

XML-RPC 服务器

Python 还附带 SimpleXMLRPCServer ,它是一个用来实现 XML-RPC 服务器的模块。要公开 XML-RPC 服务,您可以向 SimpleXMLRPCServer 模块中与其同名的类的一个实例注册函数或实例。最直接的方法就是编写带有实现您需求的方法的实例,然后注册这个实例。但在这种情况下方法名不能包含点号,因此,我们也就不能再使用前面讨论过的手段让服务器看起来代表多个对象。这样一来的影响不久将变得非常清楚,但首先让我们来创建一个日历服务器,比如我们一直用来演示 SOAP 服务器的那种。 清单 4(calserver.py)是 XML-RPC 日历服务器实现:

清单 4:XML-RPC 日历服务器

 import calendar, SimpleXMLRPCServer
#The server object
class Calendar:
  def getMonth(self, year, month):
    return calendar.month(year, month)
  def getYear(self, year):
    return calendar.calendar(year)
calendar_object = Calendar()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
server.register_instance(calendar_object)
#Go into the main listener loop
print "Listening on port 8888"
server.serve_forever()

Calendar 类实现了我们想公开的方法。这些方法接收数字并返回字符串。我们先创建这个对象的一个实例,然后再创建 XML-RPC 服务器类的一个实例,我们向后一个实例注册日历实例。这立刻会使 getMonth 和 getYear 方法在服务器上可用。请记住,Python 中的类型是动态定义的,所以多数情况下您会希望向方法添加类型检查代码。当然,Python 丰富的表达方式使得我们可以轻而易举地做到这一点,同时还意味着您能够很容易地进行类型检查,而且这些类型检查可以比多数语言所允许的更复杂。在主代码中,我们创建一个服务器对象,为其提供一个代表侦听地址和端口的元组。这个地址可以是一个主机名或 IP 地址。最后,我们把这个服务器放入它的主循环中,这个循环只在操作系统发信号中断它(比如用户按下 CTRL-C)时才中断。请打开另外一个控制台并运行服务器脚本。

为测试该服务器,我们在 清单 5(calclient.py)中编写了一个简单的客户机:

清单 5:日历服务器的样本请求程序

 import xmlrpclib
server = xmlrpclib.ServerProxy("http://localhost:8888")
month = server.getMonth(2002, 8)
print month

在这里,您可以看到我们不在方法名中包含点号的影响。我们不是首先从服务器获得一个伪对象(它实际上只表示从方法名的点号前提取的那一部分),而是只需调用服务器代理本身的方法。输出结果是:

$ python calclient.py
   August 2002
Mo Tu We Th Fr Sa Su
     1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

结束语

XML-RPC 比 SOAP 更简单,在开放源代码的项目中非常流行。它是任何语言或框架目前都必须提供的基本工具箱,所以在 Python 中添加新的 XML-RPC 模块是很受欢迎的。但它也有自己的缺点,主要就是对字符编码的支持不够,它的字符编码支持对英语有一种令人吃惊的偏向,在国际化的重要性已被充分理解的今天看来,这是很不合时宜的。

在下一部分,我们将研究针对另一个已经广泛流行的 Web 服务接口的 Python 工具,这个接口就是 RDF 站点摘要(RDF site summary,RSS)。

上一页  1 2 3 4 5 

Tags:Python Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接