• 四部门调整完善新能源汽车推广应用财政补贴政策 2018-08-15
  • 两男子在吉大美食城“百元找零”诈骗? 2018-08-12
  • 突破!郑鹏创中国队冬残奥会个人项目最好成绩 2018-08-12
  • 今年铜陵市将治理水土流失面积36平方公里 2018-08-11
  • 篮球投注技巧 2018-08-11
  • 威海马上就可以接种四价宫颈癌疫苗 附接种地点 2018-08-10
  • 德赫亚暗示博格巴,像我这样才能在曼联取得成功! 2018-08-10
  • 广州出台“红棉计划”吸引海外人才来穗创新创业 2018-08-10
  • 不敌吉林队 四川男篮赛季排名倒数第二收官 2018-08-10
  • 北京榜样,我为你点一个大大的赞 2018-08-09
  • 石家庄空气质量排名"后十"的乡镇将被约谈 2018-08-08
  • 日本公布秘密文件:美日曾密谋“瓜分”中国(图) 2018-08-08
  • 秦岭户外救援现状调查 志愿者组队救援费用AA制均摊 2018-08-08
  • 皇台酒业为证券虚假陈述案埋单,8名投资者将获赔近62万元 2018-08-08
  • 中科大揭示酵母酶的“钻戒”结构 可优化癌症的个性化治疗 2018-08-08
  • 【ruby教程】Ruby Web Services 应用 - SOAP4R

    栏目: Ruby 发布于: 2014-11-26 08:16:05

    Ruby Web Services 应用 - SOAP4R


    什么是 SOAP?

    简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范。

    SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

    简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

    更多 SOAP 教程请查看:http://www.rocksun.cn/soap/soap-tutorial.html。


    SOAP4R 安装

    SOAP4R 由Hiroshi Nakamura开发实现,用于 Ruby 的 SOAP 应用。

    SOAP4R 下载地址:http://www.rocksun.cn/project/soap4r/。

    注意:你的ruby环境可能已经安装了该该组件。

    Linux 环境下你也可以使用 gem 来安装该组件,命令如下:

    $ gem install soap4r --include-dependencies
    

    如果你是window环境下开发,你需要下载zip压缩文件,并通过执行 install.rb 来安装。


    SOAP4R 服务

    SOAP4R 支持两种不同的服务类型:

    • 基于 CGI/FastCGI 服务 (SOAP::RPC::CGIStub)
    • 独立服务 (SOAP::RPC:StandaloneServer)

    本教程将为大家介绍如何建立独立的 SOAP 服务。步骤如下:

    第1步 - 继承SOAP::RPC::StandaloneServer

    为了实现自己的独立的服务器,你需要编写一个新的类,该类为 SOAP::RPC::StandaloneServer 的子类:

    class MyServer < SOAP::RPC::StandaloneServer
      ...............
    end
    

    注意:如果你要编写一个基于FastCGI的服务器,那么你需要继承 SOAP::RPC::CGIStub 类,程序的其余部分将保持不变。

    第二步 - 定义处理方法

    接下来我们定义Web Services的方法,如下我们定义两个方法,一个是两个数相加,一个是两个数相除:

    class MyServer < SOAP::RPC::StandaloneServer
       ...............
    
       # 处理方法
       def add(a, b)
          return a + b
       end
       def div(a, b) 
          return a / b 
       end
    end
    

    第三步 - 公布处理方法

    接下来添加我们在服务器上定义的方法,initialize方法是公开的,用于外部的连接:

    class MyServer < SOAP::RPC::StandaloneServer
       def initialize(*args)
          add_method(receiver, methodName, *paramArg)
       end
    end
    

    以下是各参数的说明:

    参数描述
    receiver包含方法名的方法的对象。 如果你在同一个类中定义服务方法,该参数为 self。
    methodName 调用 RPC 请求的方法名。
    paramArg参数名和参数模式

    为了理解 inoutout 参数,考虑以下服务方法,需要输入两个参数:inParam 和 inoutParam,函数执行完成后返回三个值:retVal、inoutParam 、outParam:

    def aMeth(inParam, inoutParam)
       retVal = inParam + inoutParam
       outParam = inParam . inoutParam
       inoutParam = inParam * inoutParam
       return retVal, inoutParam, outParam
    end
    

    公开的调用方法如下:

    add_method(self, 'aMeth', [
        %w(in inParam),
        %w(inout inoutParam),
        %w(out outParam),
        %w(retval return)
    ])
    

    第四步 - 开启服务

    最后我们通过实例化派生类,并调用 start 方法来启动服务:

    myServer = MyServer.new('ServerName',
                            'urn:ruby:ServiceName', hostname, port)
    
    myServer.start
    

    以下是请求参数的说明:

    参数描述
    ServerName服务名,你可以取你喜欢的
    urn:ruby:ServiceNameHere urn:ruby 是固定的,但是你可以为你的服务取一个唯一的 ServiceName
    hostname指定主机名
    portweb 服务端口

    实例

    接下来我们通过以上的步骤,创建一个独立的服务:

    require "soap/rpc/standaloneserver"
    
    begin
       class MyServer < SOAP::RPC::StandaloneServer
    
          # Expose our services
          def initialize(*args)
             add_method(self, 'add', 'a', 'b')
             add_method(self, 'div', 'a', 'b')
          end
    
          # Handler methods
          def add(a, b)
             return a + b
          end
          def div(a, b) 
             return a / b 
          end
      end
      server = MyServer.new("MyServer", 
                'urn:ruby:calculation', 'localhost', 8080)
      trap('INT){
         server.shutdown
      }
      server.start
    rescue => err
      puts err.message
    end
    

    执行以上程序后,就启动了一个监听 8080 端口的本地服务,并公开两个方法:add 和 div。

    你可以再后台执行以上服务:

    $ ruby MyServer.rb&
    

    SOAP4R 客户端

    ruby 中使用 SOAP::RPC::Driver 类开发 SOAP 客户端。接下来我们来详细看下 SOAP::RPC::Driver 类的使用。

    调用 SOAP 服务需要以下信息:

    • SOAP 服务 URL 地址 (SOAP Endpoint URL)
    • 服务方法的命名空间(Method Namespace URI)
    • 服务方法名及参数信息

    接下来我们就一步步来创建 SOAP 客户端来调用以上的 SOAP 方法:add 、 div:

    第一步 - 创建 SOAP Driver 实例

    我们可以通过实例化 SOAP::RPC::Driver 类来调用它的新方法,如下所示:

    SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
    

    以下是参数的描述:

    参数描述
    endPoint连接 SOAP 服务的 URL 地址
    nameSpace 命名空间用于 SOAP::RPC::Driver 对象的所有 RPC .
    soapAction用于 HTTP 头部的 SOAPAction 字段值。如果是字符串是"" 则默认为 nil

    第二步 - 添加服务方法

    为 SOAP::RPC::Driver 添加 SOAP 服务方法,我们可以通过实例 SOAP::RPC::Driver 来调用以下方法:

    driver.add_method(name, *paramArg)
    

    以下是参数的说明:

    参数描述
    name远程web服务的方法名
    paramArg 指定远程程序的参数

    第三步 - 调用SOAP服务

    最后我们可以使用 SOAP::RPC::Driver 实例来调用 SOAP 服务:

    result = driver.serviceMethod(paramArg...)
    

    serviceMethod SOAP服务的实际方法名,paramArg为方法的参数列表。

    实例

    基于以上的步骤,我们可以编写以下的 SOAP 客户端:

    #!/usr/bin/ruby -w
    
    require 'soap/rpc/driver'
    
    NAMESPACE = 'urn:ruby:calculation'
    URL = 'http://localhost:8080/'
    
    begin
       driver = SOAP::RPC::Driver.new(URL, NAMESPACE)
       
       # Add remote sevice methods
       driver.add_method('add', 'a', 'b')
    
       # Call remote service methods
       puts driver.add(20, 30)
    rescue => err
       puts err.message
    end
    

    以上我们只是简单介绍 Ruby 的 Web Services 。 如果你想了解更多可以查看官方文档:Ruby 的 Web Services


    本文转载自:w3cschool
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:【ruby教程】Ruby Web Services 应用 - SOAP4R
    IT技术书籍推荐:
    计算机科学丛书:Php和Mysql Web开发(原书第4版)
    计算机科学丛书:Php和Mysql Web开发(原书第4版)
    Luke Welling (作者), Laura Thomson (作者), 武欣 (译者)
    《计算机科学丛书:Php和Mysql Web开发(原书第4版)》将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子?!都扑慊蒲Т允?Php和Mysql Web开发(原书第4版)》是第4版,经过了全面的更新、重写和扩展,包括PHP 5.3最新改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web 2.0以及Web应用需要注意的安全问题。