PythonTip >> 博文 >> python

python通过web.py实现web service解析xml格式

zihua 2014-03-16 15:03:25 点击: 811 | 收藏


前沿:

这两天一直和平台研发中心的人搞接口,那边给的都是用java实现的web service 。这边的接口很是规范,用的soap的方式。  我这边的话,也是需要用python的一些库做支持的。

什么是soap,什么是wsdl,为什么要用他们

SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言。http呢它得到了所有的因特网浏览器及服务器的支持。

WSDL 指网络服务描述语言 ,是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作。

我是做python的,你是java的,他是做.net,如果我们三个之间要进行通信,要进行数据交换,怎么办呢?我们需要一个能和我们都能通信的工具。soap,wsdl被创造出来,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

今天没事干,就自己在家搞了一个简单的 web service 通信接口,没啥技术含量, 勿喷 哈!

实现web services 一般是两种方式,一个是  简单的xml和json回数据,另一个就是复杂的soap或者是rest操作。。。 其实soap属于老些的东西,感觉现在用soap会越来越少,restful对于各种资源的定义更加的准确,然后soap更多的是用xml进行传输,而rest是用json,json要比xml轻型和方便的!不多说啦, 我这里就简单的用第一种方式实现吧。

原文: http://rfyiamcool.blog.51cto.com/1030776/1377354

安装python的web.py模块,我这边就不用tornado和flask,用下web.py

wKioL1MkUGqhN8LbAAHCauyqSvU613.jpg

把下面的数据存放到user_data.xml文件内。

<users>
	<user id="1" name="rui" age="38"/>
	<user id="2" name="ali" age="50"/>
	<user id="3" name="tx" age="38"/>
	<user id="4" name="letv" age="99"/>
	<user id="5" name="renren" age="88"/>
</users>

这个是主程序  gorun.py

#!/usr/bin/env python
import web
import xml.etree.ElementTree as ET
tree = ET.parse('user_data.xml')
root = tree.getroot()
urls = (
	'/users', 'list_users',
	'/users/(.*)', 'get_user'
)
app = web.application(urls, globals())
class list_users:
	def GET(self):
		output = 'users:['
		for child in root:
			print 'child', child.tag, child.attrib
			output += str(child.attrib) + ','
		output += ']';
		return output
class get_user:
	def GET(self, user):
		for child in root:
			if child.attrib['id'] == user:
				return str(child.attrib)
if __name__ == "__main__":
	app.run()

好了,跑起来 ~

#xiaorui.cc
[root@devops-ruifengyun web ]$ python gorun.py
http://0.0.0.0:8080/
127.0.0.1:58888 - - [15/Mar/2014 21:07:55] "HTTP/1.1 GET /users/1" - 200 OK
child user {'age': '38', 'id': '1', 'name': 'rui'}
child user {'age': '50', 'id': '2', 'name': 'ali'}
child user {'age': '38', 'id': '3', 'name': 'tx'}
child user {'age': '99', 'id': '4', 'name': 'letv'}
child user {'age': '88', 'id': '5', 'name': 'renren'}
127.0.0.1:58889 - - [15/Mar/2014 21:07:57] "HTTP/1.1 GET /users" - 200 OK
child user {'age': '38', 'id': '1', 'name': 'rui'}
child user {'age': '50', 'id': '2', 'name': 'ali'}
child user {'age': '38', 'id': '3', 'name': 'tx'}
child user {'age': '99', 'id': '4', 'name': 'letv'}
child user {'age': '88', 'id': '5', 'name': 'renren'}
127.0.0.1:58890 - - [15/Mar/2014 21:08:00] "HTTP/1.1 GET /users" - 200 OK
127.0.0.1:58891 - - [15/Mar/2014 21:08:02] "HTTP/1.1 GET /users/1" - 200 OK
127.0.0.1:58892 - - [15/Mar/2014 21:08:03] "HTTP/1.1 GET /users/2" - 200 OK
127.0.0.1:58893 - - [15/Mar/2014 21:08:05] "HTTP/1.1 GET /users/3" - 200 OK
127.0.0.1:58895 - - [15/Mar/2014 21:08:06] "HTTP/1.1 GET /users/4" - 200 OK
127.0.0.1:58896 - - [15/Mar/2014 21:08:08] "HTTP/1.1 GET /users/5" - 200 OK

wKiom1MkUVfCn2EYAANZmIfrHPE823.jpg

这就算一个简单的web services的接口了 ~   这个算是简单的实现,其实我平时更喜欢用restful来做api,适合现在和以后的开发。

本文出自 “峰云,就她了。” 博客,谢绝转载!

原文链接:http://www.tuicool.com/articles/3yiUfm

作者:zihua | 分类: python | 标签: python | 阅读: 811 | 发布于: 2014-03-16 15时 |