পাইথনের http.server (পূর্বে BaseHTTPServer) কাস্টমাইজ করে সাধারণ API, ডায়নামিক ওয়েব সার্ভার এবং শক্তিশালী অভ্যন্তরীণ সরঞ্জাম তৈরি করার জন্য বিশ্বব্যাপী ডেভেলপারদের জন্য একটি বিস্তৃত গাইড।
পাইথনের বিল্ট-ইন HTTP সার্ভার আয়ত্ত করা: কাস্টমাইজেশনের গভীরে ডুব
পাইথন তার "ব্যাটারি-ইনক্লুডেড" দর্শনের জন্য বিখ্যাত, যা ডেভেলপারদের ন্যূনতম বাহ্যিক নির্ভরতা সহ কার্যকরী অ্যাপ্লিকেশন তৈরি করতে সক্ষম করে এমন একটি সমৃদ্ধ স্ট্যান্ডার্ড লাইব্রেরি সরবরাহ করে। এই ব্যাটারিগুলির মধ্যে সবচেয়ে দরকারী, তবুও প্রায়শই উপেক্ষিত, হল বিল্ট-ইন HTTP সার্ভার। আপনি এটিকে এর আধুনিক পাইথন 3 নাম, http.server
, বা এর লিগ্যাসি পাইথন 2 নাম, BaseHTTPServer
হিসাবে জানেন কিনা, এই মডিউলটি ওয়েব প্রোটোকলগুলি বোঝার এবং হালকা ওজনের ওয়েব পরিষেবাগুলি তৈরির প্রবেশদ্বার।
যদিও অনেক ডেভেলপার প্রথমে এটিকে একটি ডিরেক্টরিতে ফাইল পরিবেশন করার জন্য এক-লাইনার হিসাবে দেখেন, তবে এর আসল শক্তি এর প্রসারণযোগ্যতার মধ্যে নিহিত। এর মূল উপাদানগুলিকে উপশ্রেণীভুক্ত করে, আপনি এই সাধারণ ফাইল সার্ভারটিকে একটি কাস্টম-টেইলরড ওয়েব অ্যাপ্লিকেশন, ফ্রন্টএন্ড ডেভেলপমেন্টের জন্য একটি মক API, IoT ডিভাইসের জন্য একটি ডেটা রিসিভার বা একটি শক্তিশালী অভ্যন্তরীণ সরঞ্জাম হিসাবে রূপান্তর করতে পারেন। এই গাইড আপনাকে বেসিক থেকে শুরু করে উন্নত কাস্টমাইজেশন পর্যন্ত নিয়ে যাবে, যা আপনাকে আপনার নিজের প্রকল্পের জন্য এই দুর্দান্ত মডিউলটি ব্যবহার করতে সজ্জিত করবে।
বেসিক: কমান্ড লাইন থেকে একটি সাধারণ সার্ভার
কোডে ডুব দেওয়ার আগে, আসুন সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে একবার দেখে নেওয়া যাক। যদি আপনার পাইথন ইনস্টল করা থাকে, তবে আপনার কাছে ইতিমধ্যে একটি ওয়েব সার্ভার রয়েছে। একটি টার্মিনাল বা কমান্ড প্রম্পট ব্যবহার করে আপনার কম্পিউটারের যে কোনও ডিরেক্টরিতে নেভিগেট করুন এবং নিম্নলিখিত কমান্ডটি চালান (পাইথন 3 এর জন্য):
python -m http.server 8000
তাত্ক্ষণিকভাবে, আপনার বর্তমান অবস্থানের ফাইল এবং সাবডিরেক্টরিগুলি পরিবেশন করে 8000 পোর্টে একটি ওয়েব সার্ভার চলছে৷ আপনি http://localhost:8000
এ আপনার ব্রাউজার থেকে এটি অ্যাক্সেস করতে পারেন। এটি নিম্নলিখিতগুলির জন্য অবিশ্বাস্যভাবে দরকারী:
- স্থানীয় নেটওয়ার্কে দ্রুত ফাইল শেয়ার করা।
- জটিল সেটআপ ছাড়াই সাধারণ HTML, CSS এবং জাভাস্ক্রিপ্ট প্রকল্প পরীক্ষা করা।
- একটি ওয়েব সার্ভার কীভাবে বিভিন্ন অনুরোধ পরিচালনা করে তা পরিদর্শন করা।
যাইহোক, এই এক-লাইনারটি কেবল হিমশৈলের চূড়া। এটি একটি পূর্ব-নির্মিত, জেনেরিক সার্ভার চালায়। কাস্টম লজিক যোগ করতে, বিভিন্ন অনুরোধের ধরন পরিচালনা করতে বা ডায়নামিক সামগ্রী তৈরি করতে, আমাদের নিজস্ব পাইথন স্ক্রিপ্ট লিখতে হবে।
মূল উপাদানগুলি বোঝা
এই মডিউল দিয়ে তৈরি একটি ওয়েব সার্ভারে দুটি প্রধান অংশ থাকে: সার্ভার এবং হ্যান্ডলার। কার্যকর কাস্টমাইজেশনের জন্য তাদের স্বতন্ত্র ভূমিকা বোঝা জরুরি।
1. সার্ভার: HTTPServer
সার্ভারের কাজ হল একটি নির্দিষ্ট ঠিকানা এবং পোর্টে আগত নেটওয়ার্ক সংযোগগুলি শোনা। এটি ইঞ্জিন যা TCP সংযোগগুলি গ্রহণ করে এবং প্রক্রিয়াকরণের জন্য একটি হ্যান্ডলারের কাছে প্রেরণ করে। http.server
মডিউলে, এটি সাধারণত HTTPServer
ক্লাস দ্বারা পরিচালিত হয়। আপনি একটি সার্ভার ঠিকানা (('localhost', 8000)
এর মতো একটি টিপল) এবং একটি হ্যান্ডলার ক্লাস সরবরাহ করে এর একটি উদাহরণ তৈরি করেন।
এর প্রধান দায়িত্ব হল নেটওয়ার্ক সকেট পরিচালনা করা এবং অনুরোধ-প্রতিক্রিয়া চক্র পরিচালনা করা। বেশিরভাগ কাস্টমাইজেশনের জন্য, আপনাকে HTTPServer
ক্লাসটি নিজেই পরিবর্তন করতে হবে না, তবে এটি জানা জরুরি যে এটি সেখানে রয়েছে, শো চালাচ্ছে।
2. হ্যান্ডলার: BaseHTTPRequestHandler
এখানেই আসল জাদু ঘটে। হ্যান্ডলার আগত HTTP অনুরোধ পার্সিং, ক্লায়েন্ট কী চাইছে তা বোঝা এবং একটি উপযুক্ত HTTP প্রতিক্রিয়া তৈরি করার জন্য দায়ী। প্রতিবার সার্ভার একটি নতুন অনুরোধ পেলে, এটি প্রক্রিয়াকরণের জন্য আপনার হ্যান্ডলার ক্লাসের একটি উদাহরণ তৈরি করে।
http.server
মডিউলটি কয়েকটি পূর্ব-নির্মিত হ্যান্ডলার সরবরাহ করে:
BaseHTTPRequestHandler
: এটি সবচেয়ে মৌলিক হ্যান্ডলার। এটি অনুরোধ এবং শিরোনাম পার্স করে তবে GET বা POST এর মতো নির্দিষ্ট অনুরোধ পদ্ধতির প্রতিক্রিয়া জানাতে জানে না। আপনি যখন স্ক্র্যাচ থেকে সবকিছু তৈরি করতে চান তখন এটি উত্তরাধিকার সূত্রে পাওয়ার জন্য উপযুক্ত বেস ক্লাস।SimpleHTTPRequestHandler
: এটিBaseHTTPRequestHandler
থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং বর্তমান ডিরেক্টরি থেকে ফাইল পরিবেশন করার জন্য লজিক যুক্ত করে। আপনি যখনpython -m http.server
চালান, তখন আপনি এই হ্যান্ডলারটি ব্যবহার করছেন। আপনি যদি ডিফল্ট ফাইল-সার্ভিং আচরণের উপরে কাস্টম লজিক যুক্ত করতে চান তবে এটি একটি দুর্দান্ত সূচনা পয়েন্ট।CGIHTTPRequestHandler
: এটি CGI স্ক্রিপ্টগুলি পরিচালনা করার জন্যSimpleHTTPRequestHandler
প্রসারিত করে। আধুনিক ওয়েব ডেভেলপমেন্টে এটি কম সাধারণ তবে এটি লাইব্রেরির ইতিহাসের অংশ।
প্রায় সমস্ত কাস্টম সার্ভার কাজের জন্য, আপনার কাজের মধ্যে একটি নতুন ক্লাস তৈরি করা জড়িত যা BaseHTTPRequestHandler
বা SimpleHTTPRequestHandler
থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং এর পদ্ধতিগুলিকে ওভাররাইড করে।
আপনার প্রথম কাস্টম সার্ভার: একটি "হ্যালো, ওয়ার্ল্ড!" উদাহরণ
আসুন কমান্ড লাইন থেকে বেরিয়ে এসে একটি সার্ভারের জন্য একটি সাধারণ পাইথন স্ক্রিপ্ট লিখি যা একটি কাস্টম বার্তা দিয়ে সাড়া দেয়। আমরা BaseHTTPRequestHandler
থেকে উত্তরাধিকার সূত্রে পাব এবং do_GET
পদ্ধতিটি প্রয়োগ করব, যা কোনও HTTP GET অনুরোধ পরিচালনা করার জন্য স্বয়ংক্রিয়ভাবে কল করা হয়।
custom_server.py
নামের একটি ফাইল তৈরি করুন:
# Use http.server for Python 3
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
hostName = "localhost"
serverPort = 8080
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
# 1. Send the response status code
self.send_response(200)
# 2. Send headers
self.send_header("Content-type", "text/html")
self.end_headers()
# 3. Write the response body
self.wfile.write(bytes("<html><head><title>My Custom Server</title></head>", "utf-8"))
self.wfile.write(bytes("<p>Request: %s</p>" % self.path, "utf-8"))
self.wfile.write(bytes("<body>", "utf-8"))
self.wfile.write(bytes("<p>This is a custom server, created with Python's http.server.</p>", "utf-8"))
self.wfile.write(bytes("</body></html>", "utf-8"))
if __name__ == "__main__":
webServer = HTTPServer((hostName, serverPort), MyServer)
print(f"Server started http://{hostName}:{serverPort}")
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
এটি চালানোর জন্য, আপনার টার্মিনালে python custom_server.py
চালান। আপনি যখন আপনার ব্রাউজারে http://localhost:8080
এ যান, তখন আপনি আপনার কাস্টম HTML বার্তাটি দেখতে পাবেন। আপনি যদি অন্য কোনও পথে যান, যেমন http://localhost:8080/some/path
, বার্তাটি সেই পথটি প্রতিফলিত করবে।
আসুন do_GET
পদ্ধতিটি ভেঙে দেখি:
self.send_response(200)
: এটি HTTP স্ট্যাটাস লাইন পাঠায়।200 OK
একটি সফল অনুরোধের জন্য স্ট্যান্ডার্ড প্রতিক্রিয়া।self.send_header("Content-type", "text/html")
: এটি একটি HTTP শিরোনাম পাঠায়। এখানে, আমরা ব্রাউজারকে বলি যে আমরা যে সামগ্রীটি প্রেরণ করছি তা HTML। ব্রাউজারটিকে সঠিকভাবে পৃষ্ঠা রেন্ডার করার জন্য এটি অত্যন্ত গুরুত্বপূর্ণ।self.end_headers()
: এটি একটি ফাঁকা লাইন পাঠায়, HTTP শিরোনামগুলির সমাপ্তি এবং প্রতিক্রিয়া বডির শুরু সংকেত দেয়।self.wfile.write(...)
:self.wfile
একটি ফাইল-এর মতো বস্তু যা আপনি আপনার প্রতিক্রিয়া বডি লিখতে পারেন। এটি বাইট আশা করে, স্ট্রিং নয়, তাই আমাদেরbytes("…", "utf-8")
ব্যবহার করে আমাদের HTML স্ট্রিংকে বাইটে এনকোড করতে হবে।
উন্নত কাস্টমাইজেশন: ব্যবহারিক রেসিপি
এখন যেহেতু আপনি বেসিকগুলি বুঝতে পেরেছেন, আসুন আরও শক্তিশালী কাস্টমাইজেশনগুলি অন্বেষণ করি।
POST অনুরোধগুলি পরিচালনা করা (do_POST
)
ওয়েব অ্যাপ্লিকেশনগুলিকে প্রায়শই ডেটা গ্রহণ করতে হয়, উদাহরণস্বরূপ, একটি HTML ফর্ম বা একটি API কল থেকে। এটি সাধারণত একটি POST অনুরোধের মাধ্যমে করা হয়। এটি পরিচালনা করার জন্য, আপনি do_POST
পদ্ধতিটি ওভাররাইড করুন।
do_POST
এর ভিতরে, আপনাকে অনুরোধ বডিটি পড়তে হবে। এই বডির দৈর্ঘ্য Content-Length
শিরোনামে নির্দিষ্ট করা হয়েছে।
এখানে একটি হ্যান্ডলারের উদাহরণ দেওয়া হল যা একটি POST অনুরোধ থেকে JSON ডেটা পড়ে এবং এটিকে ফেরত দেয়:
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
class APIServer(BaseHTTPRequestHandler):
def _send_cors_headers(self):
"""Sends headers to allow cross-origin requests"""
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
self.send_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type")
def do_OPTIONS(self):
"""Handles pre-flight CORS requests"""
self.send_response(200)
self._send_cors_headers()
self.end_headers()
def do_POST(self):
# 1. Read the content-length header
content_length = int(self.headers['Content-Length'])
# 2. Read the request body
post_data = self.rfile.read(content_length)
# For demonstration, let's log the received data
print(f"Received POST data: {post_data.decode('utf-8')}")
# 3. Process the data (here, we just echo it back as JSON)
try:
received_json = json.loads(post_data)
response_data = {"status": "success", "received_data": received_json}
except json.JSONDecodeError:
self.send_response(400) # Bad Request
self.end_headers()
self.wfile.write(bytes('{"error": "Invalid JSON"}', "utf-8"))
return
# 4. Send a response
self.send_response(200)
self._send_cors_headers()
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(response_data).encode("utf-8"))
# Main execution block remains the same...
if __name__ == "__main__":
# ... (use the same HTTPServer setup as before, but with APIServer as the handler)
server_address = ('localhost', 8080)
httpd = HTTPServer(server_address, APIServer)
print('Starting server on port 8080...')
httpd.serve_forever()
CORS-এর উপর নোট: do_OPTIONS
পদ্ধতি এবং _send_cors_headers
ফাংশনটি ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) পরিচালনা করার জন্য অন্তর্ভুক্ত করা হয়েছে। আপনি যদি কোনও ভিন্ন অরিজিন (ডোমেইন/পোর্ট) থেকে পরিবেশিত কোনও ওয়েব পৃষ্ঠা থেকে আপনার API কল করেন তবে এটি প্রায়শই প্রয়োজনীয়।
JSON প্রতিক্রিয়া সহ একটি সাধারণ API তৈরি করা
আসুন বেসিক রুটিং সহ একটি সার্ভার তৈরি করতে আগের উদাহরণটি প্রসারিত করি। ক্লায়েন্ট কী রিসোর্স অনুরোধ করছে তা নির্ধারণ করতে আমরা self.path
বৈশিষ্ট্যটি পরিদর্শন করতে পারি এবং সেই অনুযায়ী প্রতিক্রিয়া জানাতে পারি। এটি আমাদের একক সার্ভারের মধ্যে একাধিক API এন্ডপয়েন্ট তৈরি করতে দেয়।
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
# Mock data
users = {
1: {"name": "Alice", "country": "Canada"},
2: {"name": "Bob", "country": "Australia"}
}
class APIHandler(BaseHTTPRequestHandler):
def _set_headers(self, status_code=200):
self.send_response(status_code)
self.send_header("Content-type", "application/json")
self.send_header("Access-Control-Allow-Origin", "*")
self.end_headers()
def do_GET(self):
parsed_path = urlparse(self.path)
path = parsed_path.path
if path == "/api/users":
self._set_headers()
self.wfile.write(json.dumps(list(users.values())).encode("utf-8"))
elif path.startswith("/api/users/"):
try:
user_id = int(path.split('/')[-1])
user = users.get(user_id)
if user:
self._set_headers()
self.wfile.write(json.dumps(user).encode("utf-8"))
else:
self._set_headers(404)
self.wfile.write(json.dumps({"error": "User not found"}).encode("utf-8"))
except ValueError:
self._set_headers(400)
self.wfile.write(json.dumps({"error": "Invalid user ID"}).encode("utf-8"))
else:
self._set_headers(404)
self.wfile.write(json.dumps({"error": "Not Found"}).encode("utf-8"))
# Main execution block as before, using APIHandler
# ...
এই হ্যান্ডলারের সাথে, আপনার সার্ভারের এখন একটি আদিম রুটিং সিস্টেম রয়েছে:
/api/users
-এ একটি GET অনুরোধ সমস্ত ব্যবহারকারীর একটি তালিকা ফেরত দেবে।/api/users/1
-এ একটি GET অনুরোধ অ্যালিসের বিবরণ ফেরত দেবে।- অন্য কোনও পথ 404 ত্রুটি ফিরিয়ে দেবে।
একসাথে ফাইল এবং ডায়নামিক সামগ্রী পরিবেশন করা
যদি আপনি একটি ডায়নামিক API রাখতে চান তবে স্ট্যাটিক ফাইলগুলি (যেমন index.html
) একই সার্ভার থেকে পরিবেশন করতে চান? সবচেয়ে সহজ উপায় হল SimpleHTTPRequestHandler
থেকে উত্তরাধিকার সূত্রে পাওয়া এবং যখন কোনও অনুরোধ আপনার কাস্টম পথের সাথে মেলে না তখন এর ডিফল্ট আচরণের কাছে অর্পণ করা।
super()
ফাংশনটি এখানে আপনার সেরা বন্ধু। এটি আপনাকে প্যারেন্ট ক্লাসের পদ্ধতি কল করতে দেয়।
import json
from http.server import SimpleHTTPRequestHandler, HTTPServer
class HybridHandler(SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/api/status':
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
response = {'status': 'ok', 'message': 'Server is running'}
self.wfile.write(json.dumps(response).encode('utf-8'))
else:
# For any other path, fall back to the default file-serving behavior
super().do_GET()
# Main execution block as before, using HybridHandler
# ...
এখন, যদি আপনি একই ডিরেক্টরিতে একটি index.html
ফাইল তৈরি করেন এবং এই স্ক্রিপ্টটি চালান, http://localhost:8080/
এ গেলে আপনার HTML ফাইল পরিবেশিত হবে, http://localhost:8080/api/status
এ গেলে আপনার কাস্টম JSON প্রতিক্রিয়া ফেরত দেবে।
পাইথন 2 (BaseHTTPServer
) এর উপর একটি নোট
যদিও পাইথন 2 আর সমর্থিত নয়, আপনি লিগ্যাসি কোড সম্মুখীন হতে পারেন যা HTTP সার্ভারের সংস্করণ ব্যবহার করে। ধারণাগুলি একই, তবে মডিউলের নামগুলি আলাদা। এখানে একটি দ্রুত অনুবাদ গাইড রয়েছে:
- পাইথন 3:
http.server
-> পাইথন 2:BaseHTTPServer
,SimpleHTTPServer
- পাইথন 3:
socketserver
-> পাইথন 2:SocketServer
- পাইথন 3:
from http.server import BaseHTTPRequestHandler
-> পাইথন 2:from BaseHTTPServer import BaseHTTPRequestHandler
পদ্ধতির নাম (do_GET
, do_POST
) এবং মূল লজিক একই থাকে, যা পুরানো স্ক্রিপ্টগুলিকে পাইথন 3 এ পোর্ট করা তুলনামূলকভাবে সহজ করে তোলে।
উৎপাদন বিবেচনা: কখন সরানো উচিত
পাইথনের বিল্ট-ইন HTTP সার্ভার একটি অসাধারণ সরঞ্জাম, তবে এর সীমাবদ্ধতা রয়েছে। এটি কখন সঠিক পছন্দ এবং কখন আপনার আরও শক্তিশালী সমাধানের জন্য পৌঁছানো উচিত তা বোঝা জরুরি।
1. কনকারেন্সি এবং পারফরম্যান্স
ডিফল্টরূপে, HTTPServer
একক-থ্রেডেড এবং অনুক্রমিকভাবে অনুরোধগুলি প্রক্রিয়া করে। যদি কোনও অনুরোধ প্রক্রিয়া করতে দীর্ঘ সময় নেয় তবে এটি অন্যান্য সমস্ত আগত অনুরোধগুলিকে ব্লক করবে। সামান্য আরও উন্নত ব্যবহারের ক্ষেত্রে, আপনি একটি মাল্টি-থ্রেডেড সার্ভার তৈরি করতে socketserver.ThreadingMixIn
ব্যবহার করতে পারেন:
from socketserver import ThreadingMixIn
from http.server import HTTPServer
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
pass
# In your main block, use this instead of HTTPServer:
# webServer = ThreadingHTTPServer((hostName, serverPort), MyServer)
যদিও এটি কনকারেন্সির সাথে সহায়তা করে, তবে এটি এখনও উচ্চ-পারফরম্যান্স, উচ্চ-ট্র্যাফিক উত্পাদন পরিবেশের জন্য ডিজাইন করা হয়নি। সম্পূর্ণ ওয়েব ফ্রেমওয়ার্ক এবং অ্যাপ্লিকেশন সার্ভার (যেমন Gunicorn বা Uvicorn) কর্মক্ষমতা, রিসোর্স ম্যানেজমেন্ট এবং স্কেলেবিলিটির জন্য অপ্টিমাইজ করা হয়েছে।
2. নিরাপত্তা
http.server
নিরাপত্তা একটি প্রাথমিক ফোকাস হিসাবে নির্মিত হয়নি। এতে ক্রস-সাইট স্ক্রিপ্টিং (XSS), ক্রস-সাইট রিকোয়েস্ট ফোরজি (CSRF), বা SQL ইনজেকশনের মতো সাধারণ ওয়েব দুর্বলতার বিরুদ্ধে বিল্ট-ইন সুরক্ষা নেই। Django, Flask, এবং FastAPI-এর মতো প্রোডাকশন-গ্রেড ফ্রেমওয়ার্কগুলি এই সুরক্ষাগুলি বাক্স থেকে সরবরাহ করে।
3. বৈশিষ্ট্য এবং বিমূর্ততা
আপনার অ্যাপ্লিকেশন বাড়ার সাথে সাথে আপনি ডাটাবেস ইন্টিগ্রেশন (ORMs), টেমপ্লেট ইঞ্জিন, অত্যাধুনিক রুটিং, ব্যবহারকারী প্রমাণীকরণ এবং মিডলওয়্যার-এর মতো বৈশিষ্ট্যগুলি চাইবেন। যদিও আপনি http.server
-এর উপরে এই সমস্ত কিছু তৈরি করতে পারেন, তবে আপনি মূলত একটি ওয়েব ফ্রেমওয়ার্ক পুনরায় উদ্ভাবন করবেন। Flask, Django, এবং FastAPI-এর মতো ফ্রেমওয়ার্কগুলি এই উপাদানগুলিকে একটি সুগঠিত, যুদ্ধ-পরীক্ষিত এবং রক্ষণাবেক্ষণযোগ্য উপায়ে সরবরাহ করে।
http.server
এর জন্য ব্যবহার করুন:
- HTTP শেখা এবং বোঝা।
- দ্রুত প্রোটোটাইপিং এবং ধারণার প্রমাণ।
- সাধারণ, অভ্যন্তরীণ-একমাত্র সরঞ্জাম বা ড্যাশবোর্ড তৈরি করা।
- ফ্রন্টএন্ড ডেভেলপমেন্টের জন্য মক API সার্ভার তৈরি করা।
- IoT বা স্ক্রিপ্টের জন্য লাইটওয়েট ডেটা সংগ্রহ এন্ডপয়েন্ট।
একটি ফ্রেমওয়ার্কে সরান এর জন্য:
- পাবলিক-ফেসিং ওয়েব অ্যাপ্লিকেশন।
- প্রমাণীকরণ এবং ডাটাবেস মিথস্ক্রিয়া সহ জটিল API।
- যে অ্যাপ্লিকেশনগুলিতে নিরাপত্তা, কর্মক্ষমতা এবং স্কেলেবিলিটি গুরুত্বপূর্ণ।
উপসংহার: সরলতা এবং নিয়ন্ত্রণের শক্তি
পাইথনের http.server
ভাষার ব্যবহারিক ডিজাইনের একটি প্রমাণ। এটি ওয়েব প্রোটোকলগুলির সাথে কাজ করতে হবে এমন যে কারও জন্য একটি সরল তবুও শক্তিশালী ভিত্তি সরবরাহ করে। এর অনুরোধ হ্যান্ডলারগুলিকে কাস্টমাইজ করতে শেখার মাধ্যমে, আপনি অনুরোধ-প্রতিক্রিয়া চক্রের উপর সূক্ষ্ম-দানাযুক্ত নিয়ন্ত্রণ অর্জন করেন, যা আপনাকে একটি সম্পূর্ণ ওয়েব ফ্রেমওয়ার্কের ওভারহেড ছাড়াই বিস্তৃত দরকারী সরঞ্জাম তৈরি করতে সক্ষম করে।
পরের বার যখন আপনার একটি দ্রুত ওয়েব পরিষেবা, একটি মক API বা কেবল HTTP নিয়ে পরীক্ষা করতে চান, তখন এই বহুমুখী মডিউলটি মনে রাখবেন। এটি কেবল একটি ফাইল সার্ভারের চেয়েও বেশি; এটি আপনার ওয়েব-ভিত্তিক সৃষ্টির জন্য একটি ফাঁকা ক্যানভাস, যা পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত রয়েছে।