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:
Parameter | Penerangan | tr>||||||||
---|---|---|---|---|---|---|---|---|---|
| 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:
Parameter | Penerangan th> | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ServerName | Nama perkhidmatan, anda boleh memilih yang anda suka td> | ||||||||||
urn:ruby:ServiceName | Di sini
telah ditetapkan, tetapi anda boleh mendapatkan yang unikServiceName<🎜 untuk perkhidmatan anda > | ||||||||||
hostname | Nyatakan nama hos | ||||||||||
port | port 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 |
Parameter | Penerangan |
---|---|
endPoint | Alamat URL untuk disambungkan kepada perkhidmatan SOAP |
nameSpace | Ruang nama digunakan untuk semua RPC objek SOAP::RPC::Driver. |
soapAction | Nilai medan SOAPAction yang digunakan dalam pengepala HTTP. Jika rentetan ialah "", lalainya ialah nil |
参数 | 描述 |
---|---|
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