पटरियों पर SOAP सर्वर 3.x (वाशओट)

रेल से SOAP (सर्वर के रूप में) के लिए समर्थन संस्करण से संस्करण में बिगड़ रहा है। संस्करण 1.x में, रेल AWS से सुसज्जित थे। संस्करण 2.x में, AWS ने कई कांटों में तोड़ दिया जो उत्साही लोगों ने समर्थन किया। संस्करण 3.x से पहले, एक स्थिर कार्य संस्करण में, AWS जीवित नहीं था। SOAP के लिए वैचारिक रूप से समान रवैया सुखद नहीं हो सकता है, लेकिन वास्तविक जीवन में हम महान और भयानक एंटरप्रिस से घिरे हैं। और किसी भी एकीकरण में दो-तरफा SOAP के समर्थन की आवश्यकता हो सकती है: 1C से, स्वचालित बैंकिंग प्रणालियों तक।

संस्करण 3 के लिए एडब्ल्यूएस फोर्क्स और भी अधिक (स्टिलबोर्न?) का समर्थन करने के बजाय, हमने वॉशऑट लिखा।

मणि एसओएपी के माइम प्रकार पर ध्यान केंद्रित करते हुए response_to का समर्थन करता है, जो खुद को पंजीकृत करता है। यही है, आप एक नियंत्रक बना सकते हैं जो एचटीएमएल का उत्पादन करता है, समान रूप से अच्छी तरह से जुसन करता है और एसओएपी पर भी प्रतिक्रिया करता है। इसी समय, वॉशऑट सभी मानक रेल सुविधाओं का समर्थन करता है, जैसे कि पहले_फिल्टर।

इसे कैसे काम करना है?



मणि कनेक्ट करें


gem 'wash_out' को अपने मणिफाइल में जोड़ें।

वांछित नियंत्रकों का विस्तार करें


पता स्थान को अव्यवस्थित नहीं करने के लिए, वाशओट ApplicationController में मिश्रण नहीं करता है। इसलिए, प्रत्येक नियंत्रक के लिए जहां आप SOAP का उपयोग करना चाहते हैं, मॉड्यूल को स्वतंत्र रूप से जोड़ा जाना चाहिए।

 # app/controllers/api_controller.rb class ApiController < ApplicationController include WashOut::SOAP 


डब्लूएसडीएल का वर्णन करें


प्रत्येक विधि के मापदंडों को अलग से साबुन_करण विधि का उपयोग करके वर्णित किया गया है।

  soap_action "concat", :args => { :a => :string, :b => :string }, :return => :string def concat render :soap => (params[:a] + params[:b]) end 


SOAP त्रुटि पीढ़ी और परिवर्तित विधि नाम के साथ एक उदाहरण।

  soap_action "AddCircle", :args => { :circle => { :center => { :x => :integer, :y => :integer }, :radius => :double } }, :return => [], :to => :add_circle def add_circle circle = params[:circle] raise SOAPError, "radius is too small" if circle[:radius] < 3.0 Circle.new(circle[:center][:x], circle[:center][:y], circle[:radius]) render :soap => nil end 


रूटिंग जोड़ें


रूटिंग प्रत्येक नियंत्रक के लिए भी निर्धारित है (हमारे उदाहरण में, यह ApiController है)

 # config/routes.rb HelloWorld::Application.routes.draw do wash_out :api end 


लाभ!


इस नियंत्रक का WSDL / api / wsdl (या / your_controller / wsdl) पर स्थित है। SOAP को पहले से ही अन्य सभी तरीके और रास्ते मिलेंगे।

यह जांचने के लिए कि यह काम करता है, आप Savon रत्न का उपयोग कर सकते हैं:

 require 'savon' client = Savon::Client.new("http://localhost:3000/api/wsdl") client.wsdl.soap_actions # => [:concat, :AddCircle] client.request(:concat) do soap.body = { :a => "123", :b => "abc" } end[:value] # => "123abc" 


हम आपको OSS सेना के लिए चाहते हैं!


समस्याओं और / या विकास के विचारों के मामले में, हम आपके मुद्दे और गितुब पर पुल अनुरोधों की प्रतीक्षा कर रहे हैं।

आपका धन्यवाद

Source: https://habr.com/ru/post/In135614/


All Articles