Ruby ile Web Hizmetleri - SOAP4R
SABUN nedir?
Basit Nesne Erişim Protokolü (SOAP), XML'ye ve genellikle (ancak zorunlu olmamakla birlikte) HTTP'ye dayalı çapraz platform ve dilden bağımsız bir RPC protokolüdür.
Uzaktan yordam çağrısını yapan bilgileri kodlamak için XML kullanır ve bu bilgileri bir ağ üzerinden istemcilerden sunuculara ve tersi şekilde taşımak için HTTP kullanır.
SOAP, COM, CORBA vb. Gibi diğer teknolojilere göre çeşitli avantajlara sahiptir: örneğin, nispeten ucuz dağıtım ve hata ayıklama maliyetleri, genişletilebilirliği ve kullanım kolaylığı ve farklı diller ve platformlar için çeşitli uygulamaların varlığı.
Ayrıntılı olarak anlamak için lütfen basit öğretici SABUNumuza bakın .
Bu bölüm, Ruby için SOAP uygulamasına (SOAP4R) aşina olmanızı sağlar. Bu temel bir öğreticidir, bu nedenle derin bir ayrıntıya ihtiyacınız varsa, diğer kaynaklara başvurmanız gerekir.
SOAP4R kurulumu
SOAP4R, Hiroshi Nakamura tarafından geliştirilen Ruby için SOAP uygulamasıdır ve şu adresten indirilebilir:
NOTE - Bu bileşeni zaten yüklemiş olmanız büyük bir olasılık olabilir.
Download SOAP
Eğer farkında iseniz gem yardımcı program daha sonra SOAP4R ve ilgili paketleri yüklemek için aşağıdaki komutu kullanabilirsiniz.
$ gem install soap4r --include-dependencies
Windows üzerinde çalışıyorsanız, yukarıdaki konumdan sıkıştırılmış bir dosya indirmeniz ve ruby install.rb dosyasını çalıştırarak standart kurulum yöntemini kullanarak yüklemeniz gerekir .
SOAP4R Sunucuları Yazma
SOAP4R iki farklı sunucu türünü destekler -
- CGI / FastCGI tabanlı (SOAP :: RPC :: CGIStub)
- Bağımsız (SOAP :: RPC: StandaloneServer)
Bu bölüm, bağımsız bir sunucu yazma hakkında ayrıntılı bilgi verir. Aşağıdaki adımlar, bir SOAP sunucusu yazmakla ilgilidir.
Adım 1 - SOAP :: RPC :: StandaloneServer Sınıfını Devralın
Kendi bağımsız sunucunuzu uygulamak için , aşağıdaki gibi SOAP :: StandaloneServer'ın alt öğesi olacak yeni bir sınıf yazmanız gerekir -
class MyServer < SOAP::RPC::StandaloneServer
...............
end
NOTE- FastCGI tabanlı bir sunucu yazmak istiyorsanız , ana sınıf olarak SOAP :: RPC :: CGIStub almanız gerekir , prosedürün geri kalanı aynı kalacaktır.
Adım 2 - İşleyici Yöntemlerini Tanımlayın
İkinci adım, dış dünyaya göstermek istediğiniz Web Hizmetleri yöntemlerinizi yazmaktır.
Basit Ruby yöntemleri olarak yazılabilirler. Örneğin, iki sayıyı toplamak ve iki sayıyı bölmek için iki yöntem yazalım -
class MyServer < SOAP::RPC::StandaloneServer
...............
# Handler methods
def add(a, b)
return a + b
end
def div(a, b)
return a / b
end
end
Adım 3 - İşleyici Yöntemlerini Açığa Çıkarın
Sonraki adım, tanımlı yöntemlerimizi sunucumuza eklemektir. İnitialize yöntem aşağıdaki iki yöntemden biri ile hizmet yöntemleri göstermek için kullanılır -
class MyServer < SOAP::RPC::StandaloneServer
def initialize(*args)
add_method(receiver, methodName, *paramArg)
end
end
İşte parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | receiver MethodName yöntemini içeren nesne. Bu parametredir, methodDef yöntemi olarak aynı sınıfta hizmet yöntemlerini tanımlar kendini . |
2 | methodName Bir RPC isteği nedeniyle çağrılan yöntemin adı. |
3 | paramArg Verildiğinde, parametre adlarını ve parametre modlarını belirtir. |
Kullanımını anlamak için inout veya dışarı parametreleri, iki parametre (inParam ve inoutParam), döner bir normal dönüş değeri (retVal) ve iki başka parametre alır aşağıdaki hizmet yöntemini göz önünde bulundurun: inoutParam ve outParam -
def aMeth(inParam, inoutParam)
retVal = inParam + inoutParam
outParam = inParam . inoutParam
inoutParam = inParam * inoutParam
return retVal, inoutParam, outParam
end
Şimdi, bu yöntemi şu şekilde ortaya çıkarabiliriz -
add_method(self, 'aMeth', [
%w(in inParam),
%w(inout inoutParam),
%w(out outParam),
%w(retval return)
])
Adım 4 - Sunucuyu Başlatın
Son adım, türetilmiş sınıfın bir örneğini oluşturarak ve bunu çağırarak sunucunuzu başlatmaktır. start yöntem.
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)
myServer.start
İşte gerekli parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | ServerName Bir sunucu adı, en çok sevdiğiniz şeyi verebilirsiniz. |
2 | urn:ruby:ServiceName Burada urn: ruby sabittir ancak bu sunucu için benzersiz bir ServisAdı adı verebilirsiniz. |
3 | hostname Bu sunucunun dinleyeceği ana bilgisayar adını belirtir. |
4 | port Web hizmeti için kullanılacak mevcut bir bağlantı noktası numarası. |
Misal
Şimdi, yukarıdaki adımları kullanarak, tek bir bağımsız sunucu yazalım -
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
Yürütüldüğünde, bu sunucu uygulaması localhost'ta bağımsız bir SOAP sunucusu başlatır ve 8080 numaralı bağlantı noktasındaki istekleri dinler. İki parametre alan ve sonucu döndüren bir hizmet yöntemi, add ve div sunar .
Şimdi, bu sunucuyu aşağıdaki gibi arka planda çalıştırabilirsiniz -
$ ruby MyServer.rb&
SOAP4R İstemcileri Yazma
SABUN :: RPC :: Sürücü sınıf SABUN istemci uygulamaları yazmak için destek sağlar. Bu bölüm, bu sınıfı açıklar ve bir uygulama temelinde kullanımını gösterir.
Bir SOAP servisini aramak için ihtiyaç duyacağınız asgari bilgiler aşağıdadır -
- SOAP hizmetinin URL'si (SOAP Uç Nokta URL'si).
- Hizmet yöntemlerinin ad alanı (Yöntem Ad Alanı URI'si).
- Servis yöntemlerinin isimleri ve parametreleri.
Şimdi, yukarıdaki örnekte tanımlanan, add ve div adında servis yöntemlerini çağıran bir SOAP istemcisi yazacağız .
SOAP istemcisi oluşturmanın ana adımları aşağıda verilmiştir.
Adım 1 - Bir SOAP Sürücü Örneği Oluşturun
Yeni yöntemini aşağıdaki gibi çağırarak SOAP :: RPC :: Driver örneğini oluşturuyoruz -
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
İşte gerekli parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | endPoint Bağlanılacak SOAP sunucusunun URL'si. |
2 | nameSpace Bu SOAP :: RPC :: Driver nesnesiyle yapılan tüm RPC'ler için kullanılacak ad alanı. |
3 | soapAction HTTP başlığının SOAPAction alanı için bir değer. Eğer nil ise, bu varsayılan olarak boş "" dizesi olur. |
Adım 2 - Servis Yöntemleri Ekleyin
SOAP :: RPC :: Driver'a bir SOAP servis metodu eklemek için SOAP :: RPC :: Driver örneğini kullanarak aşağıdaki metodu çağırabiliriz -
driver.add_method(name, *paramArg)
İşte parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | name Uzak web hizmeti yönteminin adı. |
2 | paramArg Uzak prosedür parametrelerinin adlarını belirtir. |
Adım 3 - SOAP hizmetini çağırın
Son adım, SOAP :: RPC :: Driver örneğini kullanarak SOAP servisini aşağıdaki gibi faturalandırmaktır -
result = driver.serviceMethod(paramArg...)
Burada serviceMethod gerçek web hizmeti yöntemidir ve paramArg ... hizmet yönteminde geçmek için gereken liste parametreleridir.
Example
Yukarıdaki adımlara dayanarak, aşağıdaki gibi bir SOAP istemcisi yazacağız -
#!/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ğer Okumalar
Size Ruby ile Web Hizmetlerinin çok temel kavramlarını açıkladım. Daha ayrıntılı olarak incelemek isterseniz , Ruby ile Web Hizmetleri hakkında daha fazla ayrıntı bulmak için aşağıdaki bağlantı mevcuttur .