Middleware হলো একটি সফটওয়্যার কম্পোনেন্ট যা ওয়েব অ্যাপ্লিকেশনের রিকোয়েস্ট এবং রেসপন্স চেইনে মধ্যবর্তী স্তরে কাজ করে। এটি ওয়েব সার্ভারের সাথে অ্যাপ্লিকেশন বা অন্যান্য কম্পোনেন্টের মধ্যে চলে এবং রিকোয়েস্ট ও রেসপন্সের প্রক্রিয়াকে পরিবর্তন বা প্রসারিত করতে ব্যবহৃত হয়। CherryPy তে Middleware ব্যবহার করে আপনি সাধারণ রিকোয়েস্ট/রেসপন্স প্রক্রিয়া পরিচালনা করতে পারেন, যেমন লগিং, অথেনটিকেশন, বা কাস্টম প্রসেসিং।
Middleware কি?
Middleware হলো একটি সফটওয়্যার স্তর যা ওয়েব রিকোয়েস্ট ও রেসপন্সের প্রক্রিয়ার মধ্যে থাকে এবং অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে যোগাযোগের সুযোগ প্রদান করে। এটি আপনার ওয়েব অ্যাপ্লিকেশনের কার্যক্ষমতা বৃদ্ধি করতে সাহায্য করে, এবং বিভিন্ন ধরনের প্রক্রিয়া যেমন:
- লগিং (Logging)
- অথেনটিকেশন (Authentication)
- অথরাইজেশন (Authorization)
- Error handling
- থ্রোটলিং (Throttling) ইত্যাদি
মিডলওয়্যার সাধারনত রিকোয়েস্ট এবং রেসপন্সের উপর প্রভাব ফেলে এবং আপনাকে অতিরিক্ত বৈশিষ্ট্য যোগ করার সুযোগ দেয় যা মূল অ্যাপ্লিকেশনের মধ্যে অন্তর্ভুক্ত নয়।
CherryPy তে Middleware এর ব্যবহার
CherryPy তে Middleware এর কাজ করা হয় টুলস (tools) এর মাধ্যমে। CherryPy তে tools মূলত এমন মেথড বা ফাংশন যা রিকোয়েস্ট বা রেসপন্সে ব্যবহৃত হয়ে থাকে এবং এই টুলসগুলোকে মিডলওয়্যারের মতো ব্যবহার করা যায়। CherryPy-তে বিভিন্ন কাস্টম টুল বা মিডলওয়্যার তৈরি করে, আপনি রিকোয়েস্ট/রেসপন্স হ্যান্ডলিং প্রক্রিয়ায় নিজের প্রক্রিয়া বা ফাংশন যোগ করতে পারেন।
CherryPy তে Middleware ব্যবহারের উদাহরণ
উদাহরণ: Custom Logging Middleware
CherryPy তে একটি কাস্টম মিডলওয়্যার তৈরি করা যায় যা সমস্ত রিকোয়েস্টের জন্য লগিং চালু রাখে।
import cherrypy
# Custom middleware (logging) তৈরি করা
class LoggingMiddleware:
def __init__(self):
self.log_file = "access.log"
@cherrypy.tools.register('before_handler')
def log_request(self):
with open(self.log_file, 'a') as log:
log.write(f"Request received: {cherrypy.request.uri}\n")
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
if __name__ == '__main__':
cherrypy.tools.logging_middleware = LoggingMiddleware()
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
LoggingMiddlewareক্লাসটি একটি কাস্টম মিডলওয়্যার তৈরি করছে, যা সব রিকোয়েস্টের লগ রাখে।@cherrypy.tools.register('before_handler'): এটি CherryPy এর টুলস সিস্টেমেbefore_handlerস্টেপেlog_requestমেথডটি যোগ করছে। এর মানে হলো,before_handlerস্টেপে লগিং হবে, অর্থাৎ রিকোয়েস্ট হ্যান্ডলিং শুরু হওয়ার আগে এটি চলবে।- এই মিডলওয়্যার দ্বারা সমস্ত রিকোয়েস্টের URL এবং অন্যান্য ডিটেইলস
access.logফাইলে লেখা হবে।
CherryPy তে Middleware এর আরও ব্যবহার
১. Authentication Middleware
একটি কাস্টম অথেনটিকেশন মিডলওয়্যার তৈরি করা যা প্রতিটি রিকোয়েস্টের জন্য ইউজারের অথেনটিকেশন চেক করে।
import cherrypy
from cherrypy.lib import auth_basic
def check_password(realm, username, password):
# ইউজারনেম এবং পাসওয়ার্ড যাচাই করা
users = {"admin": "password123", "guest": "guest123"}
return users.get(username) == password
class AuthApp:
@cherrypy.expose
@cherrypy.tools.auth_basic(check_password)
def index(self):
return "You are authenticated!"
if __name__ == '__main__':
cherrypy.quickstart(AuthApp())
এখানে, auth_basic টুল ব্যবহার করে রিকোয়েস্টের জন্য বেসিক অথেনটিকেশন চেক করা হচ্ছে।
২. Error Handling Middleware
আপনি একটি কাস্টম মিডলওয়্যার তৈরি করতে পারেন যা ওয়েব অ্যাপ্লিকেশনটির ত্রুটির জন্য (যেমন 404 বা 500) কাস্টম ত্রুটি পৃষ্ঠা প্রদর্শন করবে।
import cherrypy
class ErrorHandlingMiddleware:
@cherrypy.expose
def error_page(self):
return "কিছু ভুল হয়েছে! দয়া করে আবার চেষ্টা করুন।"
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def trigger_error(self):
raise cherrypy.HTTPError(500, "Internal Server Error")
if __name__ == '__main__':
cherrypy.config.update({
'tools.error_page.on': True,
'tools.error_page.page': '/error_page'
})
cherrypy.quickstart(MyApp())
এখানে, একটি কাস্টম ত্রুটি পৃষ্ঠা তৈরি করা হয়েছে এবং CherryPy ত্রুটির সময় সেই পৃষ্ঠা রেন্ডার হবে।
Middleware ব্যবহারের সুবিধা
- কাস্টম প্রসেসিং: রিকোয়েস্ট বা রেসপন্স প্রক্রিয়াতে কাস্টম লজিক বা ফাংশন প্রয়োগ করা যায়।
- অথেনটিকেশন: মিডলওয়্যার ব্যবহার করে সহজে অথেনটিকেশন সিস্টেম প্রয়োগ করা যায়।
- এলার্টিং এবং লগিং: রিকোয়েস্ট এবং রেসপন্স লগিং বা অন্য কোনো প্রসেসিং মিডলওয়্যার দ্বারা করা যায়।
- Error Handling: কাস্টম ত্রুটি পৃষ্ঠা বা ত্রুটি হ্যান্ডলিং করা সহজ।
- সহজ ইন্টিগ্রেশন: CherryPy এর টুলস সিস্টেমে মিডলওয়্যার খুবই সহজে ইন্টিগ্রেট করা যায়।
CherryPy তে Middleware খুবই শক্তিশালী এবং নমনীয় টুলস সরবরাহ করে, যা আপনার অ্যাপ্লিকেশনটিকে কাস্টমাইজ করার জন্য বিশেষভাবে ব্যবহৃত হয়। আপনি যদি রিকোয়েস্ট/রেসপন্স প্রক্রিয়ার উপর প্রভাব ফেলতে চান, তবে CherryPy এর মাধ্যমে সহজে মিডলওয়্যার প্রয়োগ করতে পারেন। মিডলওয়্যার ব্যবহার করে বিভিন্ন কার্যক্রম যেমন লগিং, অথেনটিকেশন, কাস্টম ত্রুটি হ্যান্ডলিং এবং আরও অনেক কিছু সহজেই করা সম্ভব।
Read more