Python開發WebService--使用soaplib庫


使用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:此時使用你自己的開發語言通過添加服務引用進行服務接口的調用就可以了。

 

以上若有紕漏之處,還請不吝點撥,共同提高,非常感謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM