应用Python开发WebService服务端及客户端
来源:互联网 发布:python列表转换成元祖 编辑:程序博客网 时间:2024/04/27 14:55
Why
得益于Python领域广泛的功能包,使用Python来开发WebService,实现服务端或客户端,是比较快捷的途径。最近项目上恰巧遇到一个问题,内外系统分别作为客户端与服务端,接口功能已基本确定,但目前双方项目进度不统一。为避免进度受阻,希望能快速开发一个WebService服务端,以验证某些客户端功能是否正常。当然,采用其他工具或方法 也可以快速开发出WebService服务端,但本文仅验证python实现。
How
准备工作
软件环境:Windows + python2.7 + setuptools
工具包:
soaplib
lxml
pytz
twisted
suds
以上安装包,在python安装目录下运行eazy_install (如:eazy_install suds) 即可自动下载安装。
开发服务端
服务端python源码如下:
# coding: utf-8import soaplibimport cx_Oracle as cxfrom soaplib.core.server import wsgifrom soaplib.core.service import DefinitionBasefrom soaplib.core.service import soapfrom soaplib.core.model.clazz import Arrayfrom soaplib.core.model.clazz import ClassModelfrom soaplib.core.model.primitive import Integer,String, Doublefrom soaplib.core import Application# 数据库交互层,模拟一个简单的数据库交互class DBManage(ClassModel): reqNo = '' paramOut = [] def __init__(self, reqNo): self.reqNo = reqNo def exeQuery(self): # Connect to database and query values conn = cx.connect('db tns connection string') #填写数据库连接字符串 conn.begin() #开始事务 print 'connected' cursor = conn.cursor() cursor.execute("""select 'Hello!' msg from dual""") #查询示例 rs = cursor.fetchone() rtnMsg = rs[0] print rtnMsg # Hello! self.paramOut = [rtnMsg] conn.commit() #提交事务 cursor.close() #关闭资源 conn.close() #关闭连接# 请求信息类class TestRequestInfo(ClassModel): __namespace__ = "TestRequestInfo" reqNo = String# 返回信息类class ResultInfo(ClassModel): __namespace__ = "ResultInfo" reqNo = String resMsg = String# 请求方法def exeRules(reqInfo): reqNo = reqInfo.reqNo # Query Database and get values dm = DBManage(reqNo) dm.exeQuery() rs = dm.paramOut print 'dm invoke ok!' resInfo = ResultInfo() resInfo.reqNo = reqNo resInfo.resMsg = rs[0] #print resInfo return resInfoclass TestService(DefinitionBase): #WebService Method @soap(TestRequestInfo,_returns=ResultInfo) def getResultInfo(self,reqInfo): resInfo = ResultInfo() resInfo = exeRules(reqInfo) #print resInfo return resInfoif __name__=='__main__': try: print '服务已启动' from wsgiref.simple_server import make_server soap_application = Application([TestService], 'tns') wsgi_application = wsgi.Application(soap_application) server = make_server('localhost', 8899, wsgi_application) server.serve_forever() except ImportError: print 'error'
服务端创建成功并启动,通过浏览器输入 http://localhost:8899/SOAP?wsdl,可看到接口wsdl,如下图示:
创建客户端
使用python命令行创建客户端并调用服务:
>>> from suds.client import Client>>> wsc = Client("http://localhost:8899/SOAP?wsdl")>>> print wscSuds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913Service ( Application ) tns="tns" Prefixes (3) ns0 = "ResultInfo" ns1 = "TestRequestInfo" ns2 = "tns" Ports (1): (Application) Methods (1): getResultInfo(ns1:TestRequestInfo reqInfo, ) Types (94): xs:ENTITIES xs:ENTITY xs:ID xs:IDREF ...>>> requestInfo = {}>>> requestInfo['reqNo'] = '12345'>>> wsc.service.getResultInfo(requestInfo)(ResultInfo){ reqNo = "12345" resMsg = "Hello!" }>>>
总结
1、通过soaplib实现WebService服务端,通过suds自动实现客户端;
2、实际WebService接口中可能存在复杂对象数组,需要创建相应的ClassMdel类,并通过Array()实现。
参考资料
- 利用soaplib搭建webservice详细步骤和实例代码链接
- python开发webservice例子-服务端及客户端代码
1 0
- 应用Python开发WebService服务端及客户端
- Axis2开发WebService服务端及客户端
- webservice结合CXF服务端及客户端开发
- WebService服务端与客户端开发
- Java创建WebService服务端及客户端
- XFire实现WebService服务端及客户端
- Spring Webservice服务端及客户端实现
- 使用GSoap开发WebService客户端与服务端
- 使用java6开发WebService服务端和客户端
- cxf开发webservice服务端和客户端
- JDK开发webservice客户端和服务端 demo
- webservice服务端和客户端
- webService服务端与客户端
- WebService-服务端与客户端
- iOS 应用内付费(IAP)开发步骤四:客户端及服务端开发
- 使用JAX-WS创建webservice服务,含服务端及客户端
- 创建基于JAX-WS的WebService的服务端及客户端
- webservice之jax-ws服务端及客户端实现
- bzoj2257 裴蜀定理
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
- 鸟哥的 Linux 私房菜
- 关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结
- 史上最全的maven pom.xml文件教程详解
- 应用Python开发WebService服务端及客户端
- Linux常用命令大全
- 查看linux中的TCP连接数
- spark杂(二)
- Python元组
- POJ 1811(pollard算法)
- 李红霞作业第三章28题
- JS解析XML文件和XML字符串
- C#GDI二维画布控件的技术说明