Flask একটি মাইক্রোফ্রেমওয়ার্ক হিসেবে খুবই উপযোগী এবং এটি দ্রুত RESTful API তৈরি করার জন্য ব্যাপকভাবে ব্যবহৃত হয়। REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিসের জন্য সাধারণত HTTP প্রোটোকল ব্যবহার করে, এবং Flask খুবই সহজভাবে RESTful API তৈরি করতে সাহায্য করে।
Flask-এ RESTful API তৈরি করতে হলে আপনাকে কিছু মৌলিক HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করতে হবে এবং রাউট (routes) সেট করতে হবে। Flask এর মধ্যে Flask-RESTful এক্সটেনশন ব্যবহার করলে API ডেভেলপমেন্ট আরও সহজ এবং দ্রুত হয়।
১. Flask RESTful API তৈরি করার জন্য প্রাথমিক সেটআপ
Flask এবং Flask-RESTful ইনস্টলেশন:
pip install flask flask-restful
Flask অ্যাপ তৈরি করা:
এখানে একটি সাধারণ Flask RESTful API তৈরি করা হয়েছে যা কিছু GET, POST, PUT, DELETE রিকোয়েস্ট গ্রহণ করবে।
from flask import Flask, request
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
# Dummy data (In-memory database)
tasks = [
{'id': 1, 'task': 'ফ্লাস্ক দিয়ে API তৈরি করা'},
{'id': 2, 'task': 'প্রোজেক্ট ডকুমেন্টেশন লেখা'}
]
class TaskList(Resource):
def get(self):
return {'tasks': tasks}, 200 # Return all tasks in the list
def post(self):
new_task = request.get_json() # Get data from the request body
new_task['id'] = len(tasks) + 1 # Generate new task ID
tasks.append(new_task)
return new_task, 201 # Return new task with status code 201
class Task(Resource):
def get(self, task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
return {'message': 'Task not found'}, 404
return task, 200 # Return the task
def put(self, task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
return {'message': 'Task not found'}, 404
data = request.get_json() # Get the updated task data from the request
task['task'] = data['task']
return task, 200 # Return the updated task
def delete(self, task_id):
global tasks
tasks = [task for task in tasks if task['id'] != task_id]
return {'message': 'Task deleted'}, 200 # Return success message
# Define routes
api.add_resource(TaskList, '/tasks') # Route for listing and adding tasks
api.add_resource(Task, '/tasks/<int:task_id>') # Route for accessing and modifying specific task
if __name__ == "__main__":
app.run(debug=True)
২. এটি কীভাবে কাজ করে?
- GET
/tasks: এই রাউটটি সমস্ত টাস্কের তালিকা ফেরত দেয়। এতে আপনি একটি JSON ফরম্যাটে সমস্ত টাস্ক দেখতে পারবেন। - POST
/tasks: নতুন টাস্ক তৈরি করার জন্য এই রাউটটি ব্যবহৃত হয়। এখানে আপনি নতুন টাস্কের ডেটা পাঠাতে পারবেন। - GET
/tasks/<task_id>: একটি নির্দিষ্ট টাস্কের বিস্তারিত তথ্য দেখতে পারবেন, যেখানে<task_id>হল সেই টাস্কের আইডি। - PUT
/tasks/<task_id>: একটি টাস্ক আপডেট করার জন্য এই রাউটটি ব্যবহৃত হয়। এটি সংশোধিত টাস্কের তথ্য গ্রহণ করে এবং বর্তমান টাস্কের মধ্যে আপডেট করে। - DELETE
/tasks/<task_id>: নির্দিষ্ট টাস্ক মুছে ফেলার জন্য এই রাউটটি ব্যবহৃত হয়।
৩. API টেস্টিং
API তৈরি করার পরে, আপনি curl, Postman বা Swagger UI এর মতো টুল ব্যবহার করে আপনার API টেস্ট করতে পারেন।
GET রিকোয়েস্ট:
আপনি http://127.0.0.1:5000/tasks URL এ GET রিকোয়েস্ট পাঠালে আপনি সমস্ত টাস্কের তালিকা পাবেন।
POST রিকোয়েস্ট:
আপনি http://127.0.0.1:5000/tasks URL এ JSON ডেটা পাঠিয়ে নতুন টাস্ক যোগ করতে পারেন:
{
"task": "নতুন টাস্ক তৈরি"
}
PUT রিকোয়েস্ট:
আপনি http://127.0.0.1:5000/tasks/1 URL এ PUT রিকোয়েস্ট পাঠিয়ে একটি নির্দিষ্ট টাস্ক আপডেট করতে পারেন।
DELETE রিকোয়েস্ট:
আপনি http://127.0.0.1:5000/tasks/1 URL এ DELETE রিকোয়েস্ট পাঠিয়ে একটি নির্দিষ্ট টাস্ক মুছে ফেলতে পারেন।
৪. Flask RESTful API - Response Formatting
API এর রেসপন্স সাধারণত JSON ফরম্যাটে থাকে। Flask-এ আপনি jsonify ফাংশন ব্যবহার করে JSON রেসপন্স তৈরি করতে পারেন।
উদাহরণ:
from flask import jsonify
@app.route('/tasks')
def get_tasks():
return jsonify({'tasks': tasks}), 200
এখানে jsonify() ফাংশন ডেটাকে JSON ফরম্যাটে রূপান্তর করে এবং HTTP স্ট্যাটাস কোড 200 পাঠায়।
৫. Error Handling in Flask API
Flask-এ Error Handling করা অত্যন্ত গুরুত্বপূর্ণ। আপনি যদি কোনও নির্দিষ্ট রাউটে কোনও ভুল করেন বা রিকোয়েস্টের সাথে ভুল ডেটা পাঠান, তবে আপনি উপযুক্ত HTTP স্ট্যাটাস কোড এবং ম্যাসেজ রিটার্ন করতে পারেন।
উদাহরণ:
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "Resource not found"}), 404
এটি যখন কোন রিসোর্স পাওয়া যায় না (যেমন ভুল URL) তখন 404 স্ট্যাটাস কোড সহ "Resource not found" মেসেজ রিটার্ন করবে।
৬. Flask API Security
API নিরাপত্তার জন্য বেশ কিছু ব্যবস্থা নেয়া যেতে পারে, যেমন:
- Authentication (অথেন্টিকেশন): JWT (JSON Web Tokens) বা OAuth 2.0 ব্যবহার করে API-তে নিরাপদ অথেন্টিকেশন প্রক্রিয়া তৈরি করা যায়।
- Rate Limiting: Too many requests from a single user can be blocked by implementing rate limiting using Flask-Limiter.
উদাহরণ: Flask-JWT-Extended (JWT Authentication)
pip install flask-jwt-extended
এটি API রিকোয়েস্টগুলোর নিরাপত্তা বাড়ানোর জন্য ব্যবহৃত হয়।
Flask একটি লাইটওয়েট এবং নমনীয় ফ্রেমওয়ার্ক, যা RESTful API তৈরি করতে অত্যন্ত উপযোগী। Flask-RESTful ব্যবহার করে দ্রুত API তৈরি করা যায় এবং HTTP মেথড, রাউট, এবং JSON রেসপন্সের মাধ্যমে সম্পূর্ণ API সিস্টেম নির্মাণ করা সম্ভব। API নিরাপত্তার জন্য আপনাকে যথাযথ অথেন্টিকেশন, অথোরাইজেশন এবং রেট লিমিটিং ব্যবস্থাও যোগ করতে হবে। Flask আপনাকে এ সবকিছু সহজেই করতে সহায়তা করে।
Read more