使用soaplib開發基於Python語言的WebService主要有以下四個步驟:
一、准備環境
S1:下載插件Python、soaplib、Twisted、lxml(soaplib依賴於lxml這個庫)
S2:使用easy_install快速安裝,如進入Python安裝目錄下(該目錄必須已經添加到環境變量),輸入命令:easy_install soaplib,easy_install這個工具會自動 到Internet上幫我們尋找最適合本機安裝的版本並自動安裝,安裝完畢即可。
S3:我的環境配置:Python 2.7 、Twisted-12.0.0-py2.7、soaplib-2.0.0_beta2-py2.7、lxml-2.3-py2.7-
二、開發WebService
S1:使用Python開發工具,這里推薦兩個Python開發工具(1:JetBrains Pycharm;2:Eclipse),在新建的Py文件中導入以下命名空間:
import soaplib
from soaplib.core.util.wsgi_wrapper import run_twisted #(用來啟動服務,soaplib1.0不是這樣引用的,這是2.0的引用方式)
from soaplib.core.server import wsgi
from soaplib.core.service import DefinitionBase #(所有的服務類都繼承DefinitionBase基類)
from soaplib.core.service import soap #(soap標識方法的特性)
from soaplib.core.model.clazz import Array #(Array是返回集合類型的數據)
from soaplib.core.model.binary import Attachment
from soaplib.core.model.clazz import ClassModel #(如果返回的是實體類的話,必須繼承ClassModel基類)
from soaplib.core.model.primitive import Integer,String,Boolean #(Integer是返回整形,String是返回字符串類型,Boolean是返回布爾類型)
S2:下面是一個簡單的例子:
class HelloWorldService(DefinitionBase):
@soap(String, _returns=String) #(標識方法的實參以及返回值,輸入參數可以定義多個,該方法要求輸入字符串,返回字符串)
def say_hello(self, name):#(如果有傳入參數的話,按照順序寫)
return "Hello %s!" % name#(返回值)
@soap(_returns=Array(String))#(該方法沒有輸入參數的定義,返回字符串類型的集合,其中Array中必須寫返回的具體數據類型)
def GetCdrArray(self):
L_Result=["1","2","3"]#(返回集合數據的格式)
return L_Result
@soap(_returns=C_ProbeCdrModel)#(該方法沒有輸入參數的定義,返回實體類C_ProbeCdrModel類型,類的定義詳見最后)
def GetCdr(self):
L_Obj=C_ProbeCdr()
L_Model=C_ProbeCdrModel()
L_Model.Name=L_Result.Name
L_Model.Id=L_Result.Id
return L_Result
class C_ProbeCdrModel(ClassModel):#(返回的是實體類的,必須繼承ClassModel基類)
__namespace__ = "C_ProbeCdrModel"
Name=String#(定義屬性的數據類型為String)不能省略數據類型
Id=Integer#(定義屬性的數據類型為Integer)不能省略數據類型
三、發布Webservice
if __name__=="__main__":
soap_app=soaplib.core.Application([HelloWorldService], 'tns')#(中括號偽服務類的名稱)
wsgi_app=wsgi.Application(soap_app)
print 'listening on 127.0.0.1:7789'
print 'wsdl is at: http://127.0.0.1:7789/SOAP/?wsdl'
run_twisted( ( (wsgi_app, "SOAP"),), 7789)#(運行twisted服務器加載該服務)
四、訪問Python發布的WebService
S1:在瀏覽器重訪問http://127.0.0.1:7789/SOAP/?wsdl,如果正常的話,則能看到該服務的描述信息,包括各個方法的輸入參數、返回值,以及實體類的信息(如果用到了的話)
S2:此時使用你自己的開發語言通過添加服務引用進行服務接口的調用就可以了。
以上若有紕漏之處,還請不吝點撥,共同提高,非常感謝!