Perkhidmatan Web Ruby



Apakah itu SABUN?

Simple Object Access Protocol (SOAP, disingkat sebagai Simple Object Access Protocol) ialah spesifikasi protokol untuk bertukar-tukar data.

SOAP ialah protokol berasaskan XML ringkas yang membolehkan aplikasi bertukar maklumat melalui HTTP.

Protokol Akses Objek Mudah ialah spesifikasi protokol untuk bertukar-tukar data Ia adalah protokol berasaskan XML yang ringan, ringkas (subset daripada Bahasa Penanda Universal Standard). WEB.

Untuk lebih banyak tutorial SOAP, sila lihat: http://www.w3cschool.cc/soap/soap-tutorial.html.


Pemasangan SOAP4R

SOAP4R telah dibangunkan dan dilaksanakan oleh Hiroshi Nakamura untuk aplikasi SOAP Ruby.

Alamat muat turun SOAP4R: http://raa.ruby-lang.org/project/soap4r/.

Nota: Persekitaran ruby ​​​​anda mungkin sudah memasang komponen ini.

Dalam persekitaran Linux, anda juga boleh menggunakan gem untuk memasang komponen ini Perintahnya adalah seperti berikut:

$ gem install soap4r --include-dependencies

Jika anda sedang membangun dalam persekitaran tetingkap, anda perlu memuat turun fail zip dan laksanakan. install.rb untuk memasang.


Perkhidmatan SOAP4R

SOAP4R menyokong dua jenis perkhidmatan berbeza:

  • Berdasarkan perkhidmatan CGI/FastCGI (SOAP::RPC:: CGIStub )

  • Perkhidmatan Bebas (SOAP::RPC:StandaloneServer)

Tutorial ini akan memperkenalkan cara mewujudkan perkhidmatan SOAP bebas. Langkah-langkahnya adalah seperti berikut:

Langkah 1 - Warisi SOAP::RPC::StandaloneServer

Untuk melaksanakan pelayan bebas anda sendiri, anda perlu menulis kelas baharu, iaitu SOAP: :RPC Subkelas ::StandaloneServer:

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

Nota: Jika anda ingin menulis pelayan berasaskan FastCGI, maka anda perlu mewarisi kelas SOAP::RPC::CGIStub, dan selebihnya program akan Kekal tidak berubah.

Langkah 2 - Tentukan kaedah pemprosesan

Seterusnya kami mentakrifkan kaedah Perkhidmatan Web Seperti berikut, kami mentakrifkan dua kaedah, satu ialah menambah dua nombor, dan satu lagi ialah membahagi dua nombor. :

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

   # 处理方法
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

Langkah 3 - Terbitkan kaedah pemprosesan

Seterusnya tambah kaedah yang kami tentukan pada pelayan adalah awam dan digunakan untuk sambungan luaran:

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

Berikut ialah penerangan bagi setiap parameter:

ParameterPenerangan
参数描述
receiver包含方法名的方法的对象。 如果你在同一个类中定义服务方法,该参数为 self
methodName调用 RPC 请求的方法名。
paramArg参数名和参数模式
penerima<🎜>
Objek yang mengandungi nama kaedah. Jika anda mentakrifkan kaedah perkhidmatan dalam kelas yang sama, parameter ini ialah diri.
<🎜>methodName<🎜>Nama kaedah untuk memanggil permintaan RPC.
<🎜>paramArg<🎜>Nama parameter dan mod parameter

Untuk memahami parameter inout dan out, pertimbangkan kaedah perkhidmatan berikut, yang memerlukan memasukkan dua parameter: inParam dan inoutParam Selepas fungsi dilaksanakan, ia mengembalikan tiga nilai: retVal, inoutParam, outParam:

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

Kaedah panggilan awam adalah seperti berikut:

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

Langkah 4 - Mulakan perkhidmatan

Akhirnya kami memulakan perkhidmatan dengan membuat seketika kelas terbitan dan memanggil kaedah mula:

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

myServer.start

Berikut ialah perihalan parameter permintaan:

ParameterPenerangan
ServerNameNama perkhidmatan, anda boleh memilih yang anda suka
urn:ruby:ServiceNameDi sini
参数描述
ServerName服务名,你可以取你喜欢的
urn:ruby:ServiceNameHere urn:ruby 是固定的,但是你可以为你的服务取一个唯一的 ServiceName
hostname指定主机名
portweb 服务端口
urn:ruby

telah ditetapkan, tetapi anda boleh mendapatkan yang unik

ServiceName<🎜 untuk perkhidmatan anda >
hostnameNyatakan nama hos
portport perkhidmatan web

Instance

Seterusnya, kami mencipta Perkhidmatan bebas:

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

Selepas melaksanakan program di atas, perkhidmatan tempatan mendengar port 8080 dimulakan dan dua kaedah didedahkan: tambah dan div.


Anda boleh melaksanakan perkhidmatan di atas di latar belakang:

$ ruby MyServer.rb&

Klien SOAP4R

Gunakan kelas SOAP::RPC::Driver dalam ruby ​​​​untuk membangunkan pelanggan SOAP. Seterusnya, mari kita lihat dengan lebih dekat penggunaan kelas SOAP::RPC::Driver.

    Memanggil perkhidmatan SOAP memerlukan maklumat berikut:
  • Alamat URL perkhidmatan SOAP (URL Titik Akhir SOAP)
  • Nama kaedah perkhidmatan Ruang (URI Ruang Nama Kaedah)
  • Nama kaedah perkhidmatan dan maklumat parameter

Seterusnya kami akan mencipta klien SOAP langkah demi langkah untuk panggil kaedah SOAP di atas: add, div:

Langkah 1 - Buat contoh SOAP Driver

Kita boleh memanggil kaedah baharunya dengan membuat instantiating kelas SOAP::RPC::Driver, seperti berikut Paparan:

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

ParameterPenerangan
endPointAlamat URL untuk disambungkan kepada perkhidmatan SOAP
nameSpaceRuang nama digunakan untuk semua RPC objek SOAP::RPC::Driver.
soapActionNilai medan SOAPAction yang digunakan dalam pengepala HTTP. Jika rentetan ialah "", lalainya ialah nil

Langkah 2 - Tambahkan kaedah perkhidmatan

sebagai SOAP::RPC::Driver menambah kaedah perkhidmatan SOAP Kita boleh memanggil kaedah berikut melalui contoh SOAP::RPC::Driver:
参数描述
name远程web服务的方法名
paramArg指定远程程序的参数
driver.add_method(name, *paramArg)
<🎜>Berikut ialah perihalan parameter: <🎜>< 🎜>

Langkah 3 - Panggil perkhidmatan SOAP

Akhir sekali kita boleh menggunakan SOAP::RPC::Instance Pemacu untuk memanggil perkhidmatan SOAP:

result = driver.serviceMethod(paramArg...)

serviceMethod Nama kaedah sebenar SOAP service, paramArg ialah Senarai parameter kaedah.

Contoh

Berdasarkan langkah di atas, kami boleh menulis klien SOAP berikut:

#!/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

Di atas kami baru sahaja memperkenalkan Perkhidmatan Web Ruby secara ringkas. Jika anda ingin mengetahui lebih lanjut, anda boleh menyemak dokumentasi rasmi: Perkhidmatan Web Ruby