您的位置:58脚本 > ruby web Ruby Web Services 应用 – SOAP4R

ruby web Ruby Web Services 应用 – SOAP4R

2023-03-19 16:32 Ruby教程

ruby web Ruby Web Services 应用 – SOAP4R

ruby web

Ruby Web 是一种基于 Ruby 语言的 Web 开发框架,它可以帮助开发者快速构建出功能强大的 Web 应用。Ruby Web 框架有很多,其中最流行的是 Ruby on Rails(简称 Rails)。Rails 是一个开放源代码的 Web 开发框架,它使用 MVC 模式来帮助开发者快速创建出功能丰富的 Web 应用。

Rails 的 MVC 模式将应用分成三个部分:Model、View 和 Controller。Model 负责处理数据库相关的事情,View 负责显示页面内容,Controller 负责处理用户请求并将数据传递给 View 以显示页面内容。这样一来,开发者就不必在各个部分之间来回传递数据了,而是将数据传递给 Controller ,Controller 在处理完请求后将数据传递给 View 以显示页面内容。

Rails 还有很多其他特性,例如 Active Record、Action Pack、Active Support 等。Active Record 是一个对象关系映射工具,它可以帮助开发者在不同数据库之间进行数据迁移和存储。Action Pack 是一个 HTTP 处理工具集合,它包含了 Action Controller、Action View 等工具来处理 HTTP 请求和响应。Active Support 是一个标准库集合,包含了时间、日期、文件操作、字符串处理、XML 处理等功能。

# 使用 Rails 的 MVC 架构来创建一个 web 应用
$ rails new myapp -d mysql # 使用 mysql 作为数据库
$ cd myapp # 进入 myapp 目录
$ rails generate model user name:string email:string # 生成 user model
$ rake db:migrate # 迁移数据库表格
$ rails generate controller users index show new edit # 生成 users controller 以及相应的 action 
$ vim app/views/users/index.html.erb # 编辑 index 页面内容 

Ruby Web Services 应用 – SOAP4R

什么是 SOAP?

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

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

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

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


SOAP4R 安装

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

SOAP4R 下载地址:http://raa.ruby-lang.org/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:ServiceName Here urn:ruby 是固定的,但是你可以为你的服务取一个唯一的 ServiceName
hostname 指定主机名
port web 服务端口

实例

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

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


阅读全文
以上是58脚本为你收集整理的ruby web Ruby Web Services 应用 – SOAP4R全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS