Dịch vụ web với Ruby - SOAP4R
SOAP là gì?
Giao thức truy cập đối tượng đơn giản (SOAP), là một giao thức RPC đa nền tảng và độc lập với ngôn ngữ dựa trên XML và thường là (nhưng không nhất thiết) HTTP.
Nó sử dụng XML để mã hóa thông tin thực hiện cuộc gọi thủ tục từ xa và HTTP để vận chuyển thông tin đó qua mạng từ máy khách đến máy chủ và ngược lại.
SOAP có một số lợi thế so với các công nghệ khác như COM, CORBA, v.v.: ví dụ, chi phí triển khai và gỡ lỗi tương đối rẻ, khả năng mở rộng và dễ sử dụng, và sự tồn tại của một số triển khai cho các ngôn ngữ và nền tảng khác nhau.
Vui lòng tham khảo SOAP hướng dẫn đơn giản của chúng tôi để hiểu chi tiết.
Chương này giúp bạn làm quen với việc triển khai SOAP cho Ruby (SOAP4R). Đây là một hướng dẫn cơ bản, vì vậy nếu bạn cần chi tiết sâu hơn, bạn sẽ cần tham khảo các nguồn khác.
Cài đặt SOAP4R
SOAP4R là phần triển khai SOAP cho Ruby do Hiroshi Nakamura phát triển và có thể tải xuống từ -
NOTE - Có thể có nhiều khả năng là bạn đã cài đặt thành phần này.
Download SOAP
Nếu bạn biết về gem thì bạn có thể sử dụng lệnh sau để cài đặt SOAP4R và các gói liên quan.
$ gem install soap4r --include-dependencies
Nếu bạn đang làm việc trên Windows, thì bạn cần tải xuống tệp nén từ vị trí trên và cần cài đặt nó bằng phương pháp cài đặt tiêu chuẩn bằng cách chạy ruby install.rb .
Viết máy chủ SOAP4R
SOAP4R hỗ trợ hai loại máy chủ khác nhau -
- Dựa trên CGI / FastCGI (SOAP :: RPC :: CGIStub)
- Độc lập (SOAP :: RPC: StandaloneServer)
Chương này cung cấp chi tiết về cách viết một máy chủ độc lập. Các bước sau đây liên quan đến việc viết một máy chủ SOAP.
Bước 1 - Kế thừa SOAP :: RPC :: Lớp máy chủ độc lập
Để triển khai máy chủ độc lập của riêng bạn, bạn cần viết một lớp mới, lớp này sẽ là con của SOAP :: StandaloneServer như sau:
class MyServer < SOAP::RPC::StandaloneServer
...............
end
NOTE- Nếu bạn muốn viết một máy chủ dựa trên FastCGI thì bạn cần lấy SOAP :: RPC :: CGIStub làm lớp cha, phần còn lại của thủ tục sẽ giữ nguyên.
Bước 2 - Xác định phương thức xử lý
Bước thứ hai là viết các phương thức Dịch vụ Web của bạn mà bạn muốn đưa ra thế giới bên ngoài.
Chúng có thể được viết dưới dạng các phương thức Ruby đơn giản. Ví dụ, hãy viết hai phương pháp để cộng hai số và chia hai số -
class MyServer < SOAP::RPC::StandaloneServer
...............
# Handler methods
def add(a, b)
return a + b
end
def div(a, b)
return a / b
end
end
Bước 3 - Phơi bày các phương pháp xử lý
Bước tiếp theo là thêm các phương thức đã xác định của chúng tôi vào máy chủ của chúng tôi. Các initialize phương pháp được sử dụng để tiếp xúc với các phương pháp dịch vụ với một trong hai phương pháp sau đây -
class MyServer < SOAP::RPC::StandaloneServer
def initialize(*args)
add_method(receiver, methodName, *paramArg)
end
end
Đây là mô tả của các tham số -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | receiver Đối tượng chứa phương thức methodName. Bạn xác định các phương thức dịch vụ trong cùng một lớp với phương thức methodDef, tham số này là chính nó . |
2 | methodName Tên của phương thức được gọi do một yêu cầu RPC. |
3 | paramArg Chỉ định, khi đã cho, tên tham số và chế độ tham số. |
Để hiểu cách sử dụng các tham số inout hoặc out , hãy xem xét phương thức dịch vụ sau đây nhận hai tham số (inParam và inoutParam), trả về một giá trị trả về bình thường (retVal) và hai tham số khác: inoutParam và outParam -
def aMeth(inParam, inoutParam)
retVal = inParam + inoutParam
outParam = inParam . inoutParam
inoutParam = inParam * inoutParam
return retVal, inoutParam, outParam
end
Bây giờ, chúng ta có thể trình bày phương pháp này như sau:
add_method(self, 'aMeth', [
%w(in inParam),
%w(inout inoutParam),
%w(out outParam),
%w(retval return)
])
Bước 4 - Khởi động máy chủ
Bước cuối cùng là khởi động máy chủ của bạn bằng cách khởi tạo một phiên bản của lớp dẫn xuất và gọi start phương pháp.
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)
myServer.start
Đây là mô tả của các tham số bắt buộc -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | ServerName Tên máy chủ, bạn có thể đặt những gì bạn thích nhất. |
2 | urn:ruby:ServiceName Ở đây urn: ruby là không đổi nhưng bạn có thể đặt tên ServiceName duy nhất cho máy chủ này. |
3 | hostname Chỉ định tên máy chủ mà máy chủ này sẽ lắng nghe. |
4 | port Số cổng khả dụng sẽ được sử dụng cho dịch vụ web. |
Thí dụ
Bây giờ, bằng cách sử dụng các bước trên, chúng ta hãy viết một máy chủ độc lập -
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
Khi được thực thi, ứng dụng máy chủ này khởi động một máy chủ SOAP độc lập trên localhost và lắng nghe các yêu cầu trên cổng 8080. Nó hiển thị một phương thức dịch vụ, thêm và div , lấy hai tham số và trả về kết quả.
Bây giờ, bạn có thể chạy máy chủ này ở chế độ nền như sau:
$ ruby MyServer.rb&
Viết khách hàng SOAP4R
Lớp SOAP :: RPC :: Driver cung cấp hỗ trợ viết các ứng dụng khách SOAP. Chương này mô tả lớp này và trình bày cách sử dụng của nó trên cơ sở một ứng dụng.
Sau đây là thông tin tối thiểu mà bạn cần để gọi dịch vụ SOAP -
- URL của dịch vụ SOAP (URL điểm cuối SOAP).
- Không gian tên của các phương thức dịch vụ (URI không gian tên phương thức).
- Tên của các phương thức dịch vụ và các tham số của chúng.
Bây giờ, chúng ta sẽ viết một ứng dụng khách SOAP sẽ gọi các phương thức dịch vụ được định nghĩa trong ví dụ trên, có tên là add và div .
Dưới đây là các bước chính để tạo một ứng dụng khách SOAP.
Bước 1 - Tạo phiên bản trình điều khiển SOAP
Chúng tôi tạo một phiên bản của SOAP :: RPC :: Driver bằng cách gọi phương thức mới của nó như sau:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
Đây là mô tả của các tham số bắt buộc -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | endPoint URL của máy chủ SOAP để kết nối. |
2 | nameSpace Không gian tên để sử dụng cho tất cả các RPC được thực hiện với đối tượng SOAP :: RPC :: Driver này. |
3 | soapAction Một giá trị cho trường SOAPAction của tiêu đề HTTP. Nếu nil, giá trị này mặc định là chuỗi trống "". |
Bước 2 - Thêm phương thức dịch vụ
Để thêm một phương thức dịch vụ SOAP vào một SOAP :: RPC :: Driver, chúng ta có thể gọi phương thức sau bằng cách sử dụng SOAP :: RPC :: Driver instance -
driver.add_method(name, *paramArg)
Đây là mô tả của các tham số -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | name Tên của phương thức dịch vụ web từ xa. |
2 | paramArg Chỉ định tên của các tham số của thủ tục từ xa. |
Bước 3 - Gọi dịch vụ SOAP
Bước cuối cùng là lập hóa đơn dịch vụ SOAP bằng cách sử dụng SOAP :: RPC :: Driver instance như sau:
result = driver.serviceMethod(paramArg...)
Ở đây serviceMethod là phương thức dịch vụ web thực tế và paramArg ... là danh sách các tham số bắt buộc phải truyền trong phương thức dịch vụ.
Example
Dựa trên các bước trên, chúng tôi sẽ viết một ứng dụng khách SOAP như sau:
#!/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
Đọc thêm
Tôi đã giải thích cho bạn những khái niệm cơ bản về Dịch vụ Web với Ruby. Nếu bạn muốn đi sâu hơn, thì có liên kết sau để tìm thêm chi tiết về Dịch vụ web với Ruby .