การประยุกต์ใช้งาน Web Services ทับทิม - SOAP4R
SOAP คืออะไร?
Simple Object Access Protocol (SOAP เขียนทั้งหมดสำหรับ Simple Object Access Protocol) เป็นข้อกำหนดโปรโตคอลสำหรับการแลกเปลี่ยนข้อมูล
SOAP เป็นโปรโตคอลที่ใช้ XML ง่ายๆที่ช่วยให้การใช้งานในการแลกเปลี่ยนข้อมูลผ่าน HTTP
Simple Object Access Protocol เป็นโปรโตคอลสำหรับสเปคข้อมูลแลกเปลี่ยนเป็นเบาง่ายขึ้นอยู่กับ XML (เป็นส่วนหนึ่งของมาตรฐานทั่วไป Markup Language ใต้) โปรโตคอลซึ่งถูกออกแบบมาเพื่อแลกเปลี่ยนโครงสร้างบนเว็บ และบ่มข้อมูล
โปรดดูการสอน SOAP เพิ่มเติมได้ที่: http://www.w3cschool.cc/soap/soap-tutorial.html
การติดตั้ง SOAP4R
SOAP4R ฮิโรชินาคามูระพัฒนาโดยการดำเนินงานของสบู่สำหรับการใช้งานทับทิม
SOAP4R ดาวน์โหลด: http://raa.ruby-lang.org/project/soap4r/
หมายเหตุ: สภาพแวดล้อมทับทิมของคุณอาจติดตั้งไว้แล้วส่วนประกอบ
ภายใต้ Linux คุณสามารถติดตั้งส่วนประกอบโดยใช้อัญมณีคำสั่งต่อไปนี้:
$ gem install soap4r --include-dependencies
หากคุณอยู่ภายใต้สภาพแวดล้อมการพัฒนาหน้าต่างที่คุณจะต้องดาวน์โหลดไฟล์ซิปและติดตั้งโดยการดำเนินการ install.rb
บริการ SOAP4R
SOAP4R สนับสนุนทั้งสองประเภทที่แตกต่างกันในการให้บริการ:
- ขึ้นอยู่กับ CGI / บริการ FastCGI (SOAP :: RPC :: CGIStub)
- บริการอิสระ (SOAP :: RPC: StandaloneServer)
กวดวิชานี้จะแสดงวิธีการสร้าง SOAP บริการอิสระ ดำเนินการดังนี้
ขั้นตอนที่ 1 - มรดก SOAP :: RPC :: StandaloneServer
เพื่อให้บรรลุเซิร์ฟเวอร์ที่แยกต่างหากของตัวเองคุณจะต้องเขียนคลาสใหม่ที่เป็นสบู่ :: RPC :: StandaloneServer หมวดย่อย:
class MyServer < SOAP::RPC::StandaloneServer ............... end
หมายเหตุ: หากคุณต้องการเขียน FastCGI เซิร์ฟเวอร์ที่ใช้แล้วคุณจำเป็นที่จะขยาย SOAP :: RPC :: ระดับ CGIStub ส่วนที่เหลือของโปรแกรมจะยังคงไม่เปลี่ยนแปลง
ขั้นตอนที่สอง - กำหนดวิธีการประมวลผล
ต่อไปเรากำหนดวิธีการบริการเว็บเรากำหนดดังต่อไปนี้สองวิธีหนึ่งคือผลรวมของตัวเลขสองหนึ่งคือหารด้วยจำนวนสอง:
class MyServer < SOAP::RPC::StandaloneServer ............... # 处理方法 def add(a, b) return a + b end def div(a, b) return a / b end end
ขั้นตอนที่สาม - วิธีการประมวลผลสิ่งพิมพ์
ต่อไปเราจะเพิ่มวิธีการที่กำหนดไว้บนเซิร์ฟเวอร์เริ่มต้นมีการเปิดเผยวิธีการสำหรับการเชื่อมต่อภายนอก
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, methodName, *paramArg) end end
นี่คือคำอธิบายของแต่ละพารามิเตอร์:
พารามิเตอร์ | ลักษณะ |
---|---|
ผู้รับ | วัตถุที่มีชื่อวิธีของวิธีการหากคุณกำหนดวิธีการบริการในระดับเดียวกันพารามิเตอร์เป็นตัวเอง |
methodName | วิธี RPC ชื่อคำขออุทธรณ์ |
paramArg | ชื่อพารามิเตอร์และโหมดพารามิเตอร์ |
เพื่อให้เข้าใจถึงInOutและพารามิเตอร์พิจารณาวิธีการบริการต่อไปนี้คุณจะต้องป้อนสองพารามิเตอร์: inParam และ inoutParam ฟังก์ชันจะส่งกลับค่าที่สามหลังจากเสร็จสิ้นการดำเนินการ: RetVal, inoutParam, outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam end
ที่ตีพิมพ์ของสายดังนี้
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])
ขั้นตอนที่สี่ - บริการเปิด
สุดท้ายเรา instantiate ชั้นเรียนมาและเรียกวิธีการเริ่มต้นที่จะเริ่มต้นการให้บริการ:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start
ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์คำขอ:
พารามิเตอร์ | ลักษณะ |
---|---|
ServerName | ชื่อบริการที่คุณสามารถใช้ที่คุณชื่นชอบ |
โกศ: ทับทิม: SERVICENAME | นี่โกศ:ทับทิมได้รับการแก้ไข แต่คุณสามารถใช้ServiceNameไม่ซ้ำกันสำหรับบริการของคุณ |
ชื่อโฮสต์ | ระบุชื่อโฮสต์ |
พอร์ต | พอร์ตบริการเว็บ |
ตัวอย่าง
ต่อไปเราผ่านขั้นตอนข้างต้นเพื่อสร้างบริการแบบสแตนด์อะโลน:
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
หลังจากรันโปรแกรมข้างต้นเริ่มฟังบนพอร์ต 8080 ของการบริการท้องถิ่นและตีแผ่สองวิธี: เพิ่มและ div
จากนั้นคุณสามารถดำเนินการพื้นหลังของบริการเหล่านี้:
$ ruby MyServer.rb&
ลูกค้า SOAP4R
ทับทิมใช้สบู่ :: RPC :: ลูกค้า SOAP พัฒนาคลาสไดร์เวอร์ ต่อไปเราจะดูในรายละเอียดการใช้สบู่ :: RPC :: คลาสไดร์เวอร์
บริการโทร SOAP จำเป็นต้องใช้ข้อมูลต่อไปนี้:
- SOAP บริการที่อยู่ URL (SOAP Endpoint URL)
- namespace (วิธี namespace URI) วิธีการบริการ
- ชื่อวิธีการให้บริการและข้อมูลพารามิเตอร์
ต่อไปเราจะใช้ขั้นตอนในการสร้างลูกค้า SOAP เรียกวิธีการดังกล่าวข้างต้นสบู่: เพิ่ม div:
ขั้นตอนที่หนึ่ง - สร้างอินสแตนซ์ไดร์เวอร์สบู่
เราสามารถเรียกมันว่าเป็นวิธีการใหม่ในการยกตัวอย่าง SOAP :: RPC :: คลาสไดร์เวอร์ดังต่อไปนี้:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ A:
พารามิเตอร์ | ลักษณะ |
---|---|
ปลายทาง | บริการสบู่ที่อยู่ URL เชื่อมต่อ |
namespace | namespace สบู่ :: RPC :: ไดร์เวอร์วัตถุทั้งหมด RPC |
soapAction | สำหรับ SOAPAction ค่าฟิลด์ส่วนหัว HTTP ถ้าสตริงคือ ""เริ่มต้นเป็นศูนย์ |
ขั้นตอนที่สอง - เพิ่มวิธีการบริการ
SOAP :: RPC :: ไดร์เวอร์ที่จะเพิ่มวิธีการบริการ SOAP เราสามารถเรียกวิธีการดังต่อไปนี้โดยวิธีการเช่นสบู่ :: RPC :: ไดร์เวอร์:
driver.add_method(name, *paramArg)
ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ A:
พารามิเตอร์ | ลักษณะ |
---|---|
ชื่อ | ชื่อวิธีการบริการเว็บระยะไกล |
paramArg | พารามิเตอร์เพื่อระบุโปรแกรมระยะไกล |
ขั้นตอนที่สาม - บริการโทรสบู่
สุดท้ายเราสามารถใช้สบู่ :: RPC :: อินสแตนซ์ไดร์เวอร์ที่จะเรียกใช้บริการ 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 end
ดังกล่าวข้างต้นเราก็แนะนำทับทิม Web Services หากคุณต้องการทราบข้อมูลเพิ่มเติมคุณสามารถดูเอกสารอย่างเป็นทางการ: ทับทิมของ Web Services