2011-03-22 11 views
26

मैं अपना पहला रेल ऐप बना रहा हूं और मैं इसे एक आरईएसटी एपीआई से सबकुछ उपभोग करना चाहता हूं। मैं क्या करना चाहता हूं कि रेल मेरे वेब एप्लिकेशन को मेरे एपीआई के अग्रभाग के रूप में सेवा दें। जहां तक ​​मैंने पढ़ा है (मैं अभी रेल के साथ घूर रहा हूं), रेल के पास ओआरएम के साथ बहुत सी संभावनाएं हैं और डेटाबेस सिस्टम तक सीधी पहुंच है। दूसरी ओर, मेरा मंच, इस तरह से डिज़ाइन किया गया है कि प्रत्येक परत को एक परिभाषित इंटरफेस (इस मामले में एक आरईएसटी एपीआई) के माध्यम से एक्सेस किया जाता है, इसलिए किसी भी क्लाइंट से कोई डेटाबेस नहीं पढ़ा जाता है, लेकिन उनके इंटरफेस के माध्यम से।रेल अनुप्रयोग से रीस्ट एपीआई उपभोग

उदाहरण के लिए, मेरी एपीआई निम्नलिखित संसाधन को उजागर करता है:

https://api.example.com/v1/users/feature-xxx [GET] 

और मैं अपने वेब एप्लिकेशन एक पृष्ठ की तरह करना चाहते हैं:

https://example.com/feature 

तो उपयोगकर्ताओं को इस URL पर जाएँ और लॉग की जाएंगी जब में, रेल ऐप डेटा को मेरे एपीआई से इस गतिशील सामग्री को उत्पन्न करने का अनुरोध करेगा।

सवाल यह है:

  • क्या आवश्यक कदम मेरी रेल आवेदन एक HTTP/बाकी बैकएंड से अपने डेटा का उपभोग करने के लिए कर रहे हैं? और,
  • क्या यह रेल ऐप के लिए एक अच्छा डिज़ाइन है?

धन्यवाद!

+1

आप कृपया सही एक के रूप में ड्यूक के जवाब को चिह्नित कर सकता है? मेरा जवाब पुराना और अमान्य है इन समय में। – Chirantan

उत्तर

29

ActiveResource नहीं रह रेल 4.0 में शामिल किया जा रहा है। शब्द यह है कि इन दिनों इसे मुश्किल से बनाए रखा जाता है, और आरईएसटी एपीआई एंडपॉइंट्स के लिए अनुकूलित करना मुश्किल है जो "रेल मार्ग" के अनुसार तैयार नहीं होते हैं।

कुछ शोध के बाद, मैं Faraday का उपयोग करके बहुत अधिक अनुकूल हूं। इसमें विभिन्न HTTP अनुरोध एडेप्टर का उपयोग करने के लिए समर्थन शामिल है। जब आप समवर्ती होने का निर्णय लेते हैं तो यह इवेंटमैचिन सीधे, या टाइफियस जैसे पुस्तकालयों का उपयोग कर सकता है। यह रैक-जैसे मिडलवेयर को निर्बाध रूप से, कहने, प्रमाणीकरण के लिए भी समर्थन करता है।

रेल में एक आरईएसटी ओआरएम के लिए जो आसानी से कॉन्फ़िगर करने योग्य है, अपेक्षाकृत नया (लगभग एक वर्ष पुराना) Her बहुत ही आशाजनक दिखता है, और फैराडे का उपयोग करता है।

अद्यतन

मैं पूरी तरह से । बहुत आसन। यदि आपको ओआरएम-स्टाइल कार्यक्षमता की आवश्यकता है, तो आपको उच्च स्तरीय अबास्ट्रक्शन की आवश्यकता होगी, लेकिन केवल एपीआई लेने के लिए, आप इसकी सादगी को हरा नहीं सकते हैं। यह बिल्कुल ठीक है जो इसे बिना किसी झगड़े के करना है, समझदार चूक है, और इसमें ऑथ हेडर जैसे उन्नत विकल्प सेट करने की क्षमता है।

+0

मैं 'curb' की भी सिफारिश करता हूं। यह वास्तव में तेज़ है, मैंने देखा है कि सबसे तेज ग्राहक –

3

हाँ यह एक अच्छा डिजाइन हो सकता है।

मेरी सलाह इसे पढ़ने के लिए के साथ रूबी और रेल "सेवा उन्मुखी डिजाइन:। http://www.amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368

यह RESTful रूबी पर ध्यान केंद्रित एप्लिकेशन सिर्फ स्केलिंग और प्रदर्शन पर जोर देने के साथ अपने उदाहरण की तरह यह भी अलग अलग व्यवस्थाएं की जांच (रैक, सिनात्रा, रेल) ​​और भूमिकाओं वे अच्छी तरह से भरें।

दुर्भाग्य से मैं अभी तक इस रणनीति मेरी आत्म (लागू नहीं किया है!) तो मैं आप किसी भी पहले हाथ सलाह नहीं दे सकता।

21

मैं अत्यधिक के लिए ActiveResource सिफारिश करेंगे आपके आवश्यकता इसके साथ अनुभव वास्तव में अच्छा रहा है। बशर्ते कि आप जिस एपीआई का उपभोग करना चाहते हैं वह वास्तव में आरईएसटी है, मुझे नहीं लगता कि आरईएसटी एपीआई के माध्यम से डेटा उपभोग करने के लिए कोई क्लीनर डिज़ाइन है। से यह README है,

सक्रिय संसाधन

सक्रिय संसाधन (Ares) व्यापार वस्तुओं और रिप्रेसेंटेशनल स्टेट ट्रान्सफर (REST) ​​ वेब सेवाओं से जोड़ता है। यह बाकी वेब के लिए वस्तु-संबंधपरक मानचित्रण सेवाओं को लागू करता है एक ग्राहक (ActiveResource) और एक RESTful सेवा (जो ActionController :: संसाधन में आप RESTful मार्ग द्वारा प्रदान की जाती है) के बीच पारदर्शी प्रॉक्सी क्षमता प्रदान करने के।

दर्शन

सक्रिय संसाधन करने का प्रयास बाकी वेब सेवाओं के लिए एक सुसंगत आवरण वस्तु-संबंधपरक मानचित्रण प्रदान करते हैं। यह सक्रिय रिकॉर्ड के रूप में दर्शन का पालन करता है, में इसका मुख्य उद्देश्य इन संसाधनों को मैप करने के लिए आवश्यक कोड की मात्रा को कम करना है। यह द्वारा कई कोड- और प्रोटोकॉल-आधारित सम्मेलनों पर निर्भर करता है जो जटिल संबंधों और संरचनाओं को अनुमानित करने के लिए सक्रिय संसाधन के लिए आसान बनाता है। सक्रिय संसाधन :: बेस के लिए प्रलेखन में इन सम्मेलनों को विवरण में उल्लिखित किया गया है।

अवलोकन

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

विन्यास और प्रयोग

उपयोग करने के लिए सक्रिय संसाधन लाना बहुत सक्रिय रिकॉर्ड के समान है। अब व्यक्ति वर्ग बाकी सक्षम है और

class Person < ActiveResource::Base 
    self.site = "http://api.people.com:3000/" 
end 

बाकी सेवाओं बहुत आह्वान कर सकते हैं: यह रूप में सरल इसे करने के लिए एक साइट वर्ग चर उपलब्ध कराने के एक मॉडल वर्ग कि ActiveResource :: बेस से और विरासत में बनाने के रूप में है इसी प्रकार सक्रिय रिकॉर्ड कैसे जीवन चक्र विधियों को आमंत्रित करता है जो लगातार स्टोर के विरुद्ध संचालित करते हैं।

# Find a person with id = 1 
ryan = Person.find(1) 
Person.exists?(1) # => true 

आप देख सकते हैं, विधियों काफी सक्रिय रिकॉर्ड के डेटाबेस के साथ रिकॉर्ड निपटने के लिए तरीकों के समान हैं। लेकिन को डेटाबेस रिकॉर्ड के साथ सीधे से निपटने के बजाय आप HTTP संसाधन (जो डेटाबेस रिकॉर्ड हो सकता है या नहीं हो सकता है) से निपट रहे हैं।

Read more here...

+0

मुझे लगता है कि ड्यूक का जवाब अब सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – Chirantan

6

आप Farady या HTTParty की तरह एक HTTP क्लाइंट लाइब्रेरी का उपयोग नहीं करने का फैसला, तो आप अंत बिंदु कि आप की आवश्यकता और JSON के साथ उसे पार्स से डेटा हड़पने के लिए खुले uri उपयोग कर सकते हैं।

आवश्यकताएँ: खुले uri और json

नियंत्रक में:

@people = JSON.parse(open("http://api.people.com:3000/people").read, symbolize_names: true) 

ध्यान में रखते हुए:

<% @people.each do |person| %> 
    Name:<%= person[:name] %> 
    Age:<%= person[:age] %> 
<% end %> 
+0

कृपया ध्यान दें कि, अप्रयुक्त टेम्पफाइल को स्पष्ट रूप से हटाए जाने से संभावित रूप से फाइल सिस्टम पर बड़ी मात्रा में tempfiles को पीछे छोड़ दिया जा सकता है जब तक कि वे कचरा एकत्र नहीं हो जाते। एक अलग लाइन में 'ओपन' को कॉल करना और लौटा हुआ अस्थायी बंद करना बेहतर है। – yeyo

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