2013-07-30 5 views
5

में एक वेब सेवा पर पोस्ट करें। मैं वर्तमान में एक रेल ऐप विकसित कर रहा हूं जिसमें मुझे बाहरी वेब सेवा में एक्सएमएल अनुरोध गतिशील रूप से भेजने की आवश्यकता है। मैंने पहले कभी ऐसा नहीं किया है और मैं थोड़ा सा खो गया हूं।एक्सएमएल को गतिशील रूप से जेनरेट करें और इसे रेल

ऑर्डर की स्थिति अपडेट होने पर मुझे अपने लॉजिस्टिक पार्टनर को अनुरोध भेजने की आवश्यकता है। उदाहरण के लिए जब आदेश की पुष्टि हो जाती है तो मुझे ग्राहक के पते, पिकअप पता आदि जैसे डेटा भेजने की आवश्यकता होती है ...

मेरा उद्देश्य एक्सएमएल बिल्डर का उपयोग गतिशील रूप से अनुरोध उत्पन्न करने के लिए करना है और नेट: HTTP या HTTParty पोस्ट करने के लिए अनुरोध, this example पर आधारित है।

क्या ऐसा करने का सही तरीका है? मैं नियंत्रक के बाहर एक्सएमएल अनुरोध कैसे उत्पन्न कर सकता हूं और फिर इसे HTTParty या Net: HTTP में उपयोग कर सकता हूं?

आपकी मदद के लिए धन्यवाद,

क्लेम

उत्तर

6

विधि ठीक काम करेंगे कि।

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

हैं, उदाहरण के लिए, यह भावना अपने मॉडल के लिए बनाता है (जो हम OrderStatus फोन करता हूँ) एक्सएमएल उत्पन्न करने के लिए, और अपने नियंत्रक के लिए अनुरोध पोस्ट करने के लिए:

# Model (order_status.rb) 
def to_xml 
    xml = Builder::XmlMarkup.new 
    ... # Your code here 
    xml 
end 

 

# Controller (order_statuses_controller.rb) 
def some_method 
    @order_status = OrderStatus.find(:some_criteria) 
    ... # Your code here 
    http = Net::HTTP.new("www.thewebservicedomain.com") 
    response = http.post("/some/path/here", @order_status.to_xml) 
end 

आप HTTP कॉल को begin/rescue/end ब्लॉक में लपेटना और प्रतिक्रिया के साथ कुछ करना चाहते हैं, लेकिन अन्यथा यह सब बहुत सरल और सरल है।

बिल्डर के साथ एक्सएमएल बनाएं, फिर उसे तार नीचे भेजें।

आपके मामले में ऐसा लगता है कि आदेश विकसित होने के साथ आपको कई अलग-अलग अनुरोध भेजने की आवश्यकता हो सकती है; उस मामले में:

  1. योजना बनाएं कि आपके संभावित आदेश राज्य क्या हैं।
  2. निर्धारित करें कि प्रत्येक राज्य के लिए कौन सी डेटा भेजी जानी चाहिए।
  3. तय करें कि आपके मॉडल के भीतर उस स्थिति का प्रतिनिधित्व कैसे करें, ताकि जब राज्य बदलता है तो आप उचित अनुरोध भेज सकते हैं।

जहां मेरा उदाहरण एक्सएमएल उत्पन्न करने के लिए एक विधि का उपयोग करता है, शायद आप 5 संभावित आदेश राज्यों को संभालने के लिए 5 विधियां चाहते हैं।

+0

धन्यवाद आपके उत्तर कॉलिनम के लिए और एक्सएमएल जेनरेट करने के तरीके के बारे में विवरण देने के लिए! वास्तव में, मुझे विभिन्न राज्यों (राज्य-मशीन के साथ प्रतिनिधित्व) के लिए कई अलग-अलग अनुरोध भेजने की आवश्यकता होगी, लेकिन मुझे लगता है कि मैं इसे अभी संभाल सकता हूं! – ClemDoum

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