English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
بروتوكول الوصول إلى العنصر البسيط (SOAP، الكتابة الكاملة بروتوكول الوصول إلى العنصر البسيط) هو بروتوكول معيار لتبادل البيانات.
SOAP هو بروتوكول بسيط يعتمد على XML، ويجعل التطبيقات تبادل المعلومات عبر HTTP.
بروتوكول الوصول إلى العنصر البسيط هو بروتوكول معيار لتبادل البيانات، وهو بروتوكول خفيف وسهل يعتمد على XML (جزء من لغة العلامات العامة القياسية)، تم تصميمه للتبادل على شبكة الإنترنت للمعلومات المنظمة والمتجمدة.
SOAP4R تم تطوير وتنفيذ Hiroshi Nakamura، وهو مخصص للخدمات البرمجية SOAP لـ Ruby.
رابط تنزيل SOAP4R:http://raa.ruby-lang.org/project/soap4r/.
ملاحظة:قد تكون بيئة Ruby الخاصة بك قد قامت بتثبيت هذا المكون بالفعل.
في بيئة Linux يمكنك أيضًا استخدام gem لتثبيت هذا المكون، الأمر كالتالي:
gem install soap4r --include-dependencies
إذا كنت تقوم بتطوير في بيئة Windows، فإنك تحتاج إلى تنزيل ملف مضغوط zip، ثم تنفيذ install.rb للاستقرار.
SOAP4R يدعم نوعين مختلفين من أنواع الخدمات:
خدمة تعتمد على CGI/FastCGI (SOAP::RPC::CGIStub)
خدمة مستقلة (SOAP::RPC:StandaloneServer)
هذا الدليل سيقدم لك كيفية إنشاء خدمة SOAP مستقلة. الخطوات كالتالي:
لإنشاء خادم مستقل خاص بك، تحتاج إلى كتابة فئة جديدة تكون فرعًا لـ SOAP::RPC::StandaloneServer:
class MyServer < SOAP::RPC::StandaloneServer ............. fin
ملاحظة:إذا كنت تريد كتابة خادم يعتمد على FastCGI، فإنك تحتاج إلى توريث فئة SOAP::RPC::CGIStub، والجزء المتبقي من البرنامج سيبقى كما هو.
الخطوة التالية نحدد طرق Web Service، مثل ما يلي نحدد طريقتين، إحداهما جمع إثنين من الأرقام، والأخرى قسمة إثنين من الأرقام:
class MyServer < SOAP::RPC::StandaloneServer ............. # معالجة الطريقة def add(a, b) return a + b fin def div(a, b) return a / b fin fin
الخطوة التالية - إضافة الطريقة في الخادم، initialize هي عامة، تستخدم للتواصل الخارجي:
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, inoutParam, *paramArg) fin fin
هذا هو شرح كل معاملاتها:
المعلمات | الوصف |
---|---|
receiver | مثلجة الطريقة تحتوي على إسم الطريقة. إذا كنت تعرفين طريقة خدمة في نفس الفئة، فإن هذا المعامل هو self. |
methodName | إسم طريقة الطلب RPC. |
paramArg | اسم المعاملات ونمط المعاملات |
لفهم inout و out 参数,考虑以下服务方法,需要输入两个参数: inParam 和 inoutParam,函数执行完成后返回三个值:retVal、inoutParam 、outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam fin
روشهای فراخوانی عمومی公开 شده به شرح زیر است:
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
در نهایت، ما از نمونهسازی از رشته مشتق شده و فراخوانی روش start برای راهاندازی سرویس استفاده میکنیم:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
در اینجا توضیحی از پارامترهای درخواستی آورده شده است:
المعلمات | الوصف |
---|---|
ServerName | نام سرویس، میتوانید نامی که دوست دارید انتخاب کنید |
urn:ruby:ServiceName | در اینجا urn:ruby ثابت است، اما میتوانید برای سرویس خود یک نام منحصر به فرد انتخاب کنید ServiceName |
hostname | نام میزبان مشخص شده است |
port | پورت وب سرویس |
ما در ادامه با استفاده از این مراحل، یک سرویس مستقل ایجاد میکنیم:
require "soap/rpc/standaloneserver" begin class MyServer < SOAP::RPC::StandaloneServer # Expose our service def initialize(*args) add_method(self, 'add', 'a', 'b') add_method(self, 'div', 'a', 'b') fin # Handler methods def add(a, b) return a + b fin def div(a, b) return a / b fin fin server = MyServer.new("MyServer", 'urn:ruby:calculation', 'localhost', 8080) trap('INT'){ server.shutdown } server.start rescue => err puts err.message fin
بعد از اجرای این برنامه، یک سرویس محلی که در پورت 8080 گوش میدهد، راهاندازی میشود و دو روش عمومی: add و div را منتشر میکند.
يمكنك تنفيذ هذه الخدمة في الخلفية:
$ ruby MyServer.rb &
يتم تطوير عميل SOAP باستخدام فئة SOAP::RPC::Driver في Ruby. سنتحدث عن استخدام فئة SOAP::RPC::Driver بشكل مفصل.
يحتاج دعوة خدمة SOAP إلى المعلومات التالية:
عنوان URL لخدمة SOAP (عنوان نهاية SOAP)
اسم المفردة للخدمة (URI المفردة للخدمة)
اسم المتدخل في الخدمة وبيانات المعلمات
الآن سنقوم خطوة بخطوة بإنشاء عميل SOAP لدعوة SOAP methods المذكورة أعلاه: add، div:
يمكننا دعوة SOAP::RPC::Driver عن طريق تعريف فئة SOAP::RPC::Driver مثلما يلي:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
إليك شرح المعلمات التالية:
المعلمات | الوصف |
---|---|
endPoint | عنوان URL لخدمة SOAP |
nameSpace | الاسم المفردة المستخدمة لجميع RPC لـSOAP::RPC::Driver. |
soapAction | قيمة حقل SOAPAction في رأس HTTP. إذا كان النص فارغًا ""، فإن القيمة الافتراضية هي nil |
لإضافة خدمة SOAP إلى SOAP::RPC::Driver، يمكننا دعوة ما يلي كـSOAP::RPC::Driver مثال:
driver.add_method(name, *paramArg)
إليك شرح المعلمات التالية:
المعلمات | الوصف |
---|---|
الاسم | اسم المتدخل في خدمة الويب البعيدة |
paramArg | تحديد معلمات برنامج الوجهة البعيدة |
يمكننا الآن استخدام مثال SOAP::RPC::Driver لندعو خدمة SOAP:
result = driver.serviceMethod(paramArg...)
serviceMethod هو الاسم الفعلي للمتدخل في خدمة SOAP، وparamArg هو قائمة بمعلمات المتدخل.
بناءً على الخطوات السابقة، يمكننا كتابة ما يلي كعميل SOAP:
#!/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 fin
في هذا المقال، قمنا بشرح بسيط لـ Web Service في Ruby. إذا كنت ترغب في معرفة المزيد، يمكنك الرجوع إلى الوثائق الرسمية:خدمات الويب في Ruby