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 .