यदि आप अपने रूबी कौशल का अभ्यास करने के लिए एक छोटी परियोजना ढूंढ रहे हैं तो आप सही जगह पर हैं।
आज मैं आपके साथ एक "लिंक शॉर्टनर" एप्लिकेशन बनाना चाहता हूँ।
लिंक शॉर्टनर क्या है?
मुझे यकीन है कि आपने उन्हें पहले देखा है…
ये "छोटे लिंक्स" जैसे:
https://t.co/eKBRm2tTUF
जब आप इस URL पर जाते हैं तो आपको मूल URL पर रीडायरेक्ट किया जाता है।
लेकिन यह कैसे काम करता है?
विचार यह है कि इस कोड को, उदाहरण में eKBRm2tTUF, हमारे डेटाबेस पर मूल URL से मैप किया जाए।
यह एक सरल अवधारणा है, लेकिन कुछ चीजें हैं जिन्हें हमें संभालने की आवश्यकता है।
जैसे…
यह कोड कैसे उत्पन्न करें? इसे पूर्ण URL से कैसे मिलान करें?
तो चलिए शुरू करते हैं!
पहले कदम
मैं इसके लिए सिनाट्रा का उपयोग करने जा रहा हूँ क्योंकि इसे किसी सेटअप की आवश्यकता नहीं है, इसलिए हम तुरंत शुरू कर सकते हैं।
और एक सामान्य SQL डेटाबेस के बजाय मैं भी कुछ अलग करने जा रहा हूँ।
पढ़ते रहें यह जानने के लिए कि वह क्या है 🙂
यहाँ प्रारंभिक कोड है:
require 'sinatra' get '/:url' do "The URL is #{params[:url]}" end get '/' do "Send a POST request to register a new URL." end post '/' do "New URL added: #{params[:url]}\n" end यह 3 एक्शन्स, या रूट्स के साथ एक साधारण सिनाट्रा ऐप है यदि आप पसंद करते हैं।
हम अपने एप्लिकेशन पर जा सकते हैं और हमें "Send a POST request" संदेश मिलेगा।
हम ऐसा कैसे करते हैं?
आप Postman जैसे ब्राउज़र प्लगइन का उपयोग कर सकते हैं।
लेकिन मुझे इस तरह की चीज के लिए curl उपयोग करना पसंद है।
यह एक उपयोगी टूल है जिसे आप किसी भी ऑपरेटिंग सिस्टम में इंस्टॉल कर सकते हैं और यह आपको अपने सिनाट्रा ऐप के साथ बातचीत करने की अनुमति देगा।
POST रिक्वेस्ट भेजना
यदि आप साथ चल रहे हैं तो आपके पास अपना सिनाट्रा ऐप चल रहा होना चाहिए और curl आपकी मशीन पर इंस्टॉल होना चाहिए।
अब आप इस तरह एक POST रिक्वेस्ट भेज सकते हैं:
curl localhost:4567 --data "url=rubyguides.com" -X POST
यह आपके टर्मिनल पर "New URL added" संदेश प्रिंट करना चाहिए।
बढ़िया!
अगला कदम इस URL को एक छोटे URL से मैप करना है।
आइए देखें कि हम ऐसा कैसे कर सकते हैं।
URLs मैप करना
मैपिंग के लिए आप एक रैंडम स्ट्रिंग, हैश फंक्शन या किसी प्रकार के एन्कोडिंग का उपयोग कर सकते हैं।
यहाँ एक तरीका है:
LETTERS = Array('a'..'z') def generate_short_url Array.new(6) { LETTERS.sample }.join end इस मामले में मैं 6 वर्णों की एक रैंडम स्ट्रिंग के साथ जा रहा हूँ।
वीडियो देखें यदि आप इसे करने का दूसरा तरीका देखना चाहते हैं।
यह हमें "शॉर्ट कोड" देगा जिसका उपयोग हम मूल URL को छोटे URL से मैप करने के लिए करेंगे।
आगे क्या?
हमें इस कोड को कहीं सहेजने की आवश्यकता है ताकि हम उपयोगकर्ताओं को उचित स्थान पर रीडायरेक्ट कर सकें।
हमारा "NoSQL" डेटाबेस
इस परियोजना के लिए मैं सिर्फ एक साधारण डेटाबेस का उपयोग करना चाहता था।
और फाइलों का उपयोग करने से सरल क्या है, है ना?
रूबी की मानक पुस्तकालय में यह PStore क्लास शामिल है जो हमें डेटा प्रबंधित करने में मदद करेगा।
यह हमारे जैसे छोटे एप्लिकेशन के लिए बहुत अच्छा है।
यहाँ कोड है:
class ShortURL def self.save(code, original) store.transaction { |t| t[code] = original } end def self.read(code) store.transaction { |t| t[code] } end def self.store @store ||= PStore.new("short_urls.db") end end यहाँ कुछ चीजें हो रही हैं।
पहला, हमारे पास इस store मेथड के माध्यम से हमारे PStore ऑब्जेक्ट तक पहुंच है।
फिर हमारे पास save और read मेथड्स हैं।
आप देखेंगे कि PStore एक हैश की तरह व्यवहार करता है। अंतर यह है कि हर ऑपरेशन को एक ट्रांजैक्शन ब्लॉक के अंदर होने की आवश्यकता होती है।
अब हम अपने सिनाट्रा ऐप को ShortURL क्लास का उपयोग करने के लिए अपडेट कर सकते हैं:
require 'sinatra' get '/:url' do redirect "https://" + ShortURL.read(params[:url]) end get '/' do "Send a POST request to register a new URL." end post '/' do ShortURL.save(generate_short_url, params[:url]) "New URL added: localhost:4567/#{generate_short_url}\n" end और बस!
अब हमारे पास एक कार्यशील लिंक शॉर्टनर है।
प्रो टिप: आप अपने कोड में परिवर्तन करते समय अपने सिनाट्रा ऐप को ऑटो-रिलोड करने के लिए shotgun gem का उपयोग कर सकते हैं।
अभी भी कुछ काम करना बाकी है, जैसे एक फॉर्म जोड़ना ताकि हमें नया URL सबमिट करने के लिए curl का उपयोग न करना पड़े।
यदि URL डेटाबेस में नहीं है तो कुछ संदेश दिखाना।
और डुप्लिकेट की जांच करना, ताकि हम अन्य URLs को ओवरराइट न करें।
मैं इन्हें आपके लिए होमवर्क के रूप में छोड़ दूंगा 🙂
सारांश
आपने सीखा कि रूबी, सिनाट्रा और PStore का उपयोग करके लिंक शॉर्टनर एप्लिकेशन कैसे बनाएं! आपने यह भी सीखा कि curl HTTP क्लाइंट का उपयोग करके POST रिक्वेस्ट कैसे भेजें।
इस लेख को अपने दोस्तों के साथ शेयर करना न भूलें ताकि अधिक लोग सीख सकें।