2010-01-27 11 views
7

मुझे शुद्ध, काम करने वाला, रेल एप्लिकेशन मिला है।रेल - किसी अन्य ऐप के एसओएपी इंटरफ़ेस का उपयोग

अब मुझे इसे किसी अन्य एप्लिकेशन (sympa) से संचार शुरू करने की आवश्यकता है। यह एप्लिकेशन खुलासा करता है जो SOAP interface का खुलासा करता है, इसलिए यह समझ में आता है कि मैं इसका उपयोग करने का प्रयास करता हूं (कमांड लाइन इंटरफ़ेस अपूर्ण है)।

मुझे किन कदमों का पालन करना चाहिए?

मुझे किस रत्न/प्लगइन का उपयोग करना चाहिए?

क्या किसी के पास ट्यूटोरियल/उदाहरण हैं?

मैं सामान्य SOAP अवधारणाओं से कम या ज्यादा परिचित हूं, लेकिन मैंने पहले कभी SOAP का उपयोग नहीं किया है। मैं आरईएसटी समझता हूँ।

उत्तर

11

संपादित करें: यह रेल के 2.x. का पुराना उत्तर डेटिंग है। अधिक वर्तमान उत्तर के लिए, मैं आपको railscast #290 देखने की सलाह देता हूं। मैं इस जवाब को यहां छोड़ रहा हूं अगर कोई अभी भी किसी कारण से रेल 2.x का उपयोग कर रहा है, और वहां लागू नहीं हो सकता है जो रायन बेट्स कहता है।

मैं कुछ दिनों से इसके साथ लड़ रहा हूं और मुझे लगता है कि मुझे स्वयं समाधान मिला है।

एसओएपी इंटरैक्शन के लिए मुझे सबसे सरल, सबसे सक्रिय मणि मिल सकता है जिसे Savon कहा जाता है।

यह रूबी के साथ ही काम करना चाहिए। रेलवे के साथ इसका उपयोग करने के तरीके पर एक त्वरित दौरा यहां दिया गया है:

मणि इंस्टॉल करें। सबसे आसान तरीका है

config.gem "savon" 

और फिर चलाने

rake gems:install 

यह कुछ और जवाहरात के साथ savon स्थापित करना चाहिए config/पर्यावरण को संपादित करने और जोड़ने के लिए है।

इसके बाद, अपने app/models/ निर्देशिका पर एक वर्ग बनाने

तुम मुझे पसंद कर रहे हैं, तो आप रहना चाहते हैं जाएगा (यह ActiveRecord का एक उपवर्ग, अपने मॉडल निर्देशिका पर सिर्फ एक नियमित रूप से वर्ग होने के लिए नहीं है) जितना संभव हो एक्सएमएल से दूर। आप इस तरह एक वर्ग बनाने के द्वारा ऐसा कर सकते हैं:

class MyWebservice 

    WSDL = "http://www.theWebSiteWithAService.com/wsdl" 

    def self.client 
    @@client ||= Savon::Client.new(WSDL) 
    end 

    def self.soap_actions 
    return client.wsdl.soap_actions 
    end 

    def self.invoke(action, parameters) 
    response = client.send(action) { |soap| soap.body = parameters } 
    return response.to_hash 
    end 

end 

आप ज्यादातर तरीकों लागू के लिए उपयोग किया जाएगा। आप जिस तरह के तरीकों का आह्वान करने में सक्षम होंगे, वे "दूसरी साइट" प्रदान करने वाली सेवाओं पर निर्भर करते हैं। आइए कल्पना करें कि 3 क्रियाएं उपलब्ध हैं - :create_monkey, :destroy_monkey & :list_monkeys। आप इस बात की पुष्टि कर सकते हैं कि सूची रेल कंसोल पर ऐसा करने से सही है:

MyWebservice.soap_actions 
=> [:create_monkey, :destroy_monkey, :list_monkeys] 

अब कल्पना करें कि आप आह्वान करना चाहते हैं: create_monkey। सबसे पहले आपको यह जानने की जरूरत है कि उस कॉल के लिए किन पैरामीटर की आवश्यकता है। इसे देखने के लिए सबसे अच्छी जगह wsdl फ़ाइल ही है। आप कुछ इस तरह देखना चाहिए: name और hair_color:

<message name="create_monkey_request"> 
    <part name="name" type="xsd:string"/> 
    <part name="hair_color" type="xsd:string"/> 
</message> 
<message name="create_monkey_response"> 
    <part name="status" type="xsd:string"/> 
</message> 

तो यह दो पैरामीटर लेता है।माणिक कंसोल पर, आप इसे इस तरह से आह्वान कर सकते हैं:

MyWebService.invoke :create_monkey, {:name => 'frank', :hair_color => 'red' } 
=> {:status => 'ok'} 

आप एक प्रतिक्रिया के रूप में एक हैश मिल जाएगा। इस मामले में मुझे 'ठीक' स्थिति मिली, लेकिन यह कहीं अधिक जटिल हो सकता है।

बाद में, आप (उदाहरण के लिए) एक tableless modelMonkey कहा जाता है बनाते हैं, और new, create, आदि है कि वेब सेवा का उपयोग जैसे तरीकों को परिभाषित कर सकते हैं।

मैं सुरक्षा जैसी कई रोचक चीजें छोड़ रहा हूं। लेकिन अगर आपको वही समस्या हो तो आपको यह शुरू करना चाहिए।

सम्मान!

संबंधित मुद्दे