2013-02-27 26 views
8

मैं चारों ओर पढ़ रहा हूं और मुझे रूबी के लिए यह micro-framework called Grape मिला। मैं वर्तमान में वेब इंटरफेस को संभालने के लिए Sinatra का उपयोग कर रहा हूं लेकिन ऐप के एपीआई पहलू को संभालने के लिए मैं अंगूर को भी लागू करना चाहता हूं। मुझे इस विषय के लिए कोई उपयोगी सुझाव नहीं मिल रहा है। अंगूर के दस्तावेज़ीकरण में कहा गया है, "अंगूर रूबी के लिए एक आरईएसटी जैसी एपीआई माइक्रो-फ्रेमवर्क है। इसे रैक पर चलाने के लिए डिज़ाइन किया गया है या रिकस्ट एपीआई को आसानी से विकसित करने के लिए एक सरल डीएसएल प्रदान करके रेल और सिनात्रा जैसे मौजूदा वेब अनुप्रयोग ढांचे के पूरक हैं।" तो ऐसा लगता है कि दोनों सही संयोजन के आधिकारिक तरीके होना चाहिए? यह ऐप हेरोकू पर भी चलाया जाएगा।सिनात्रा और अंगूर एपीआई एक साथ?

+0

मैं [इस] (http://www.slideshare.net/yorzi/rapid-rubyapiongrape-8674582) में आया, जो शायद थोड़ा उपयोगी हो सकता है – SMT

उत्तर

19

वाक्यांशों आप देख रहे हैं कर रहे हैं:

  • कई रैक क्षुधा
  • रैक मिडलवेयर
  • मानचित्रण यूआरएल रैक सिनात्रा

बात इस तरह का। अंगूर, सिनात्रा और रेल सभी Rack ऐप्स हैं। इसका अर्थ यह है कि आप अपने अंगूर ऐप, अपने सिनात्रा ऐप और अपने रेल ऐप का निर्माण कर सकते हैं, और फिर आप उन्हें चलाने के लिए रैक का उपयोग कर सकते हैं क्योंकि वे सभी रैक अनुपालन हैं क्योंकि वे इंटरफ़ेस साझा करते हैं।

अभ्यास में इसका क्या अर्थ है कि आप एप्लिकेशन लिखते हैं, और फिर आप उन्हें चलाने के लिए रैकअप फ़ाइल में डाल देते हैं।

# app/twitter_api.rb 
module Twitter 
    # more code follows 

# config.ru 
require_relative "./app/twitter_api.rb" # add this 

# change this to: 
run Rack::URLMap.new("/" => Frontend, 
        "/api" => API, 
        "/twitter" => Twitter::API) 

:

# app/frontend.rb 
require 'sinatra/base' 
# This is a rack app. 
class Frontend < Sinatra::Base 
    get "/" 
    haml :index 
    end 
end 

__END__ 

@@ layout 
%html 
    = yield 

@@ index 
%div.title This is the frontend. 


# app/api.rb 
# This is also a rack app. 
class API < Sinatra::Base 

    # when this is mapped below, 
    # it will mean it gets called via "/api/" 
    get "/" do 
    "This is the API" 
    end 
end 

# config.ru 
require_relative "./app/frontend.rb" 
require_relative "./app/api.rb" 

# Here base URL's are mapped to rack apps. 
run Rack::URLMap.new("/" => Frontend.new, 
        "/api" => Api.new) 

आप अंगूर README से ट्विटर एपीआई उदाहरण जोड़ना चाहते थे, तो: 2 सिनात्रा एप्लिकेशन का उपयोग कर एक छोटा उदाहरण (लेकिन वे रैक क्षुधा के किसी भी प्रकार के किसी भी संख्या हो सकता है) उम्मीद है कि आपको शुरू करने के लिए पर्याप्त है। एक बार जब आप जानते हैं कि कहां देखना है तो कई उदाहरण हैं। आप use (http://www.sinatrarb.com/intro#Rack%20Middleware देखें) का उपयोग करके सिनात्रा ऐप के अंदर अन्य ऐप्स भी चला सकते हैं (और देखें कि अंगूर mount कीवर्ड भी प्रदान करता है। बहुत से तरीके उपलब्ध हैं, जो पहले थोड़ा उलझन में हो सकते हैं, लेकिन बस उन्हें आज़माएं और देखें कि वे क्या करते हैं और आपको सबसे अच्छा क्या लगता है। इसका एक बड़ा हिस्सा प्राथमिकता है, इसलिए सही महसूस करने के साथ डरो मत। एक सिनात्रा मेरा मानना ​​है कि यह ऐसा ही कुछ हो जाएगा "अंदर"

class App < Sinatra::Base 
    use Twitter::API 
    # other stuff… 
end 

# config.ru 
# instead of URLMap… 
map "/" do 
    run App 
end 

एक अंगूर अनुप्रयोग के साथ अनुप्रयोग: रूबी कंप्यूटर की तुलना में अधिक मानव :)


संपादित करने के लिए है।

+0

हैलो आपके उत्तर के लिए धन्यवाद। मैं इस विधि का उपयोग कैसे कर सकता हूं लेकिन मेरे एपीआई को रूट से भी चलाया जा सकता है? –

+0

@ क्रिस्टियन रिवरा मैंने एक उदाहरण जोड़ा है I _believe_ यह कैसे किया जाएगा। यह अन्य रैक ऐप्स और सिनात्रा के साथ काम करेगा। – iain

+0

नमस्ते मैंने आपके सुझावों का प्रयास किया और मुझे अपने ब्राउज़र में "आंतरिक सर्वर त्रुटि" मिली, मुझे सर्वर लॉग में मिला "!! अनुरोध संसाधित करते समय अप्रत्याशित त्रुटि: तर्कों की गलत संख्या (0 के लिए 1)" –

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