আপনি যদি রুবি স্কিলস প্র্যাক্টিস করার জন্য একটি ছোট প্রজেক্ট খুঁজছেন তবে আপনি সঠিক জায়গায় আছেন।
আজ আমি আপনার সাথে মিলে একটি "লিংক শর্টেনার" অ্যাপ্লিকেশন বানাতে চাই।
লিংক শর্টেনার কী?
আমি নিশ্চিত আপনি এগুলো আগে দেখেছেন...
এই "সংক্ষিপ্ত লিংক" গুলো যেমন:
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
এটি ৩টি অ্যাকশন বা রুট সহ একটি সিম্পল সিনাত্রা অ্যাপ।
আমরা আমাদের অ্যাপ্লিকেশন ভিজিট করতে পারি এবং আমরা "Send a POST request" মেসেজ পাব।
আমরা এটা কীভাবে করব?
আপনি Postman এর মতো একটি ব্রাউজার প্লাগইন ব্যবহার করতে পারেন।
কিন্তু আমি এই ধরনের জিনিসের জন্য curl ব্যবহার করতে পছন্দ করি।
এটি একটি هان্ডি টুল যা আপনি যেকোনো অপারেটিং সিস্টেমে ইনস্টল করতে পারবেন এবং এটি আপনাকে আপনার সিনাত্রা অ্যাপের সাথে ইন্টারঅ্যাক্ট করতে দেবে।
POST রিকোয়েস্ট পাঠানো
আপনি যদি ফলো করছেন তবে আপনার সিনাত্রা অ্যাপ রানিং থাকা উচিত এবং curl আপনার মেশিনে ইনস্টলড থাকা উচিত।
এখন আপনি একটি POST রিকোয়েস্ট এইভাবে পাঠাতে পারেন:
curl localhost:4567 --data "url=rubyguides.com" -X POST
এটি আপনার টার্মিনালে "New URL added" মেসেজ প্রিন্ট করবে।
বাড়তি!
পরবর্তী ধাপ হলো এই URL কে একটি ছোট URL-এ ম্যাপ করা।
আসুন দেখি কীভাবে এটি করা যায়।
URL ম্যাপিং
ম্যাপিং-এর জন্য আপনি একটি র্যান্ডম স্ট্রিং, হ্যাশ ফাংশন বা কোনো এনকোডিং ব্যবহার করতে পারেন।
এখানে একটি উপায়:
LETTERS = Array('a'..'z')
def generate_short_url
Array.new(6) { LETTERS.sample }.join
end
এই কেসে আমি ৬ ক্যারেক্টারের একটি র্যান্ডম স্ট্রিং নিয়ে যাচ্ছি।
ভিডিও দেখুন আপনি যদি আরেকটি উপায় দেখতে চান।
এটি আমাদের দেবে "শর্ট কোড" যা আমরা মূল 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 জেম ব্যবহার করতে পারেন আপনার সিনাত্রা অ্যাপ অটো-রিলোড করার জন্য যখন আপনি আপনার কোডে পরিবর্তন করেন।
এখনও কিছু কাজ বাকি, যেমন একটি ফর্ম যোগ করা যাতে আমাদের curl ব্যবহার না করেই নতুন URL সাবমিট করতে পারি।
যদি URL ডেটাবেসে না থাকে তবে কিছু মেসেজ দেখানো।
এবং ডুপ্লিকেট চেক করা, যাতে আমরা অন্য URL ওভাররাইট না করি।
এইগুলো আমি আপনার হোমওয়ার্ক হিসেবে ছাড়ে দিচ্ছি 🙂
সারসংক্ষেপ
আপনি শিখতে পেরেছেন কীভাবে একটি লিংক শর্টেনার অ্যাপ্লিকেশন বানাবেন রুবি, সিনাত্রা এবং PStore ব্যবহার করে! আপনি এছাড়া শিখতে পেরেছেন কীভাবে curl HTTP ক্লায়েন্ট ব্যবহার করে POST রিকোয়েস্ট পাঠাবেন।
এই আর্টিকেলটি আপনার বন্ধুদের সাথে শেয়ার করা ভুলবেন না যাতে আরও মানুষ শিখতে পারে।