Custom Middleware তৈরি এবং কনফিগার করা

Rails Middleware এবং Filters - রুবি অন রেইল (Ruby on Rails) - Web Development

285

Middleware হলো একটি গুরুত্বপূর্ণ অংশ Rails অ্যাপ্লিকেশনের সিস্টেমে যা রিকোয়েস্ট এবং রেসপন্সের মধ্যে কাজ করে। এটি সাধারণত রিকোয়েস্ট হ্যান্ডলিংয়ের প্রক্রিয়ায় অগ্রগতি করতে সাহায্য করে, যেমন লগিং, সেশন ম্যানেজমেন্ট, অ্যাপ্লিকেশনের নিরাপত্তা বৃদ্ধি, ইত্যাদি। Rails এর মধ্যে বেশ কিছু built-in middleware রয়েছে, তবে কখনও কখনও আপনার অ্যাপ্লিকেশনের জন্য custom middleware তৈরি করা দরকার হতে পারে।

Rails-এ custom middleware তৈরি এবং কনফিগার করার প্রক্রিয়া বেশ সহজ। এখানে আমরা দেখব কীভাবে একটি কাস্টম মিডলওয়্যার তৈরি করতে হয় এবং কীভাবে এটি কনফিগার করা যায়।


Middleware কী?

Middleware হলো একটি সফটওয়্যার উপাদান যা রিকোয়েস্ট এবং রেসপন্সের মধ্যে কাজ করে। এটি সাধারণত রিকোয়েস্ট প্রসেসিং চেইনে থাকে এবং কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি রিকোয়েস্টের পূর্বে বা পরবর্তী অংশে কিছু নির্দিষ্ট কাজ করতে পারেন, যেমন লগিং, সেশন ভ্যালিডেশন, অ্যাক্সেস কন্ট্রোল, এবং অন্যান্য কাস্টম অপারেশন।


Custom Middleware তৈরি করা

Rails-এ একটি custom middleware তৈরি করার জন্য আপনাকে একটি ক্লাস তৈরি করতে হবে যা call মেথড প্রণয়ন করবে। এই call মেথডটি রিকোয়েস্ট এবং রেসপন্স অবজেক্ট নিয়ে কাজ করবে এবং যেটি রিকোয়েস্ট প্রসেসিং চেইনে যোগ হবে।

১. Custom Middleware ক্লাস তৈরি করা

প্রথমে একটি কাস্টম মডেল তৈরি করুন, যেখানে আপনার মডিফাইড রিকোয়েস্ট লজিক থাকবে। এখানে আমরা একটি উদাহরণ হিসেবে একটি মিডলওয়্যার তৈরি করব যা ইউজার ইন্টারঅ্যাকশন লগ করবে।

# app/middleware/log_user_interaction.rb

class LogUserInteraction
  def initialize(app)
    @app = app
  end

  def call(env)
    # রিকোয়েস্ট লজিক
    request = Rack::Request.new(env)
    
    # ইউজারের IP এবং টাইমস্ট্যাম্প লগ করা
    Rails.logger.info "User IP: #{request.ip}, Request Time: #{Time.now}"

    # পরবর্তী মিডলওয়্যারে রিকোয়েস্ট পাঠান
    @app.call(env)
  end
end

এখানে, LogUserInteraction ক্লাসটি initialize মেথডের মাধ্যমে অ্যাপ্লিকেশন ইনস্ট্যান্স নেয় এবং তারপরে call মেথডে env (যা রিকোয়েস্ট ডেটা ধারণ করে) গ্রহণ করে। এটি ইউজারের আইপি এবং রিকোয়েস্ট টাইম লগ করে এবং তারপর পরবর্তী মডিউলে রিকোয়েস্ট পাঠিয়ে দেয়।


Custom Middleware কনফিগার করা

আপনার তৈরি করা কাস্টম মডিউলটি ব্যবহার করতে, আপনাকে সেটি Rails অ্যাপ্লিকেশন কনফিগারেশনে যোগ করতে হবে। Rails অ্যাপ্লিকেশনটি এমনভাবে কনফিগার করা হয় যাতে মডিউলটি রিকোয়েস্ট প্রসেসিং চেইনে অন্তর্ভুক্ত হয়।

২. Middleware কনফিগার করা

Rails অ্যাপ্লিকেশনের কনফিগারেশন ফাইলে আপনার কাস্টম মিডলওয়্যার যোগ করতে হবে। এটি config/application.rb ফাইলে করা হয়:

# config/application.rb

module YourApp
  class Application < Rails::Application
    # অন্যান্য কনফিগারেশন

    # Custom middleware যোগ করা
    config.middleware.use "LogUserInteraction"
  end
end

এখানে, config.middleware.use এর মাধ্যমে LogUserInteraction মডিউলটি অ্যাপ্লিকেশনের মিডলওয়্যার চেইনে যুক্ত করা হয়েছে।


Middleware অ্যাপ্লিকেশন চেইনে স্থান

মিডলওয়্যারটি যেখানে রাখা হবে তার উপর নির্ভর করে এর প্রভাব কিভাবে পড়বে:

  • যদি এটি রিকোয়েস্ট হ্যান্ডলিংয়ের প্রাথমিক পর্যায়ে থাকে, তবে এটি প্রথমে চলবে এবং পরবর্তী মডিউল বা কন্ট্রোলারের আগে কাজ করবে।
  • যদি এটি রেসপন্স হ্যান্ডলিংয়ের শেষে থাকে, তবে এটি রেসপন্সটি ফিরে আসার পর কাজ করবে।

আপনি চাইলে আপনার কাস্টম মডিউলটি বিশেষ পর্যায়ে নির্ধারণ করতে পারেন।


Custom Middleware এর ব্যবহার

একটি কাস্টম মিডলওয়্যার ব্যবহার করা যেতে পারে বিভিন্ন কারণে, যেমন:

  • Authentication and Authorization: ইউজার লোগিন এবং পারমিশন যাচাই করা।
  • Logging: ইউজারের রিকোয়েস্ট এবং অ্যাকশন লগ করা।
  • Request Throttling: একাধিক রিকোয়েস্টের ক্ষেত্রে থ্রটলিং প্রয়োগ করা (rate limiting)।
  • Custom Error Handling: বিশেষ ধরনের ত্রুটি পরিচালনা করা।

উদাহরণ - Rate Limiting Middleware

ধরা যাক, আপনি একটি Rate Limiting Middleware তৈরি করতে চান যা একই IP থেকে একাধিক রিকোয়েস্ট পাঠানো বন্ধ করবে।

# app/middleware/rate_limiter.rb

class RateLimiter
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    
    # সিম্পল Rate Limiting: এক মিনিটে ১০০ রিকোয়েস্টের বেশি নয়
    ip = request.ip
    if too_many_requests?(ip)
      [429, { "Content-Type" => "text/plain" }, ["Too many requests"]]
    else
      # রিকোয়েস্ট চালিয়ে যাওয়ার অনুমতি দিন
      @app.call(env)
    end
  end

  private

  def too_many_requests?(ip)
    # এখানে আপনি একটি রেট লিমিট চেক করতে পারেন
    # যেমন, IP এ ১০০ রিকোয়েস্টের বেশি হলে false ফেরত দেওয়া হবে।
    # (এটি একটি সিম্পল উদাহরণ, বাস্তবে ডেটাবেস বা রেডিস ব্যবহার করতে পারেন)
    false
  end
end

এটি config/application.rb ফাইলে যোগ করুন:

# config/application.rb

module YourApp
  class Application < Rails::Application
    # Middleware কনফিগারেশন
    config.middleware.use "RateLimiter"
  end
end

এটি নিশ্চিত করবে যে একই IP থেকে ১০০টির বেশি রিকোয়েস্ট হলে 429 Too Many Requests ত্রুটি ফেরত পাঠানো হবে।


সারমর্ম

Rails-এ Custom Middleware তৈরি এবং কনফিগার করা একটি শক্তিশালী টুল যা আপনাকে রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়ায় কাস্টম লজিক প্রয়োগ করতে সাহায্য করে। আপনি বিভিন্ন কাজ যেমন Logging, Authentication, Rate Limiting, Error Handling ইত্যাদি করতে পারেন। একটি কাস্টম মডিউল তৈরি করতে, আপনাকে শুধু call মেথড প্রণয়ন করতে হবে এবং তারপর এটি middleware stack-এ যোগ করতে হবে। এর মাধ্যমে আপনার অ্যাপ্লিকেশন আরও দক্ষ এবং কাস্টমাইজযোগ্য হবে।

Content added By
Promotion

Are you sure to start over?

Loading...