RESTful API ডেভেলপমেন্ট

চেরিপাই (CherryPy) - Web Development

367

CherryPy একটি পাইথন-ভিত্তিক মাইক্রো ওয়েব ফ্রেমওয়ার্ক যা RESTful API ডেভেলপমেন্টের জন্য বেশ উপযোগী। REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা সাধারণত ওয়েব অ্যাপ্লিকেশনের মধ্যে ডেটা আদান-প্রদানের জন্য ব্যবহৃত হয়। CherryPy এর সাহায্যে আপনি সহজেই RESTful API তৈরি করতে পারেন, যা HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে ডেটা পরিচালনা করে।

CherryPy তে RESTful API তৈরি করার জন্য কিছু মৌলিক পদক্ষেপ:

  1. GET – ডেটা রিট্রিভ করা (Read)
  2. POST – নতুন ডেটা তৈরি করা (Create)
  3. PUT – বিদ্যমান ডেটা আপডেট করা (Update)
  4. DELETE – ডেটা মুছে ফেলা (Delete)

এখন আমরা CherryPy ব্যবহার করে একটি সিম্পল RESTful API তৈরি করার উদাহরণ দেখব।


CherryPy তে RESTful API ডেভেলপমেন্ট উদাহরণ

উদাহরণ: একটি সিম্পল টু-ডু লিস্ট API

ধরা যাক, আমরা একটি সিম্পল To-Do List API তৈরি করতে চাই যেখানে:

  • GET মেথড দিয়ে টু-ডো লিস্ট রিট্রিভ করা হবে।
  • POST মেথড দিয়ে নতুন টু-ডো অ্যাড করা হবে।
  • PUT মেথড দিয়ে টু-ডো আপডেট করা হবে।
  • DELETE মেথড দিয়ে টু-ডো ডিলিট করা হবে।

কোড উদাহরণ:

import cherrypy
import json

# Dummy database for To-Do list
todos = []

class TodoAPI:
    @cherrypy.expose
    @cherrypy.tools.json_out()  # Automatically converts return value to JSON
    def index(self):
        return todos  # GET: Returns the list of to-dos

    @cherrypy.expose
    @cherrypy.tools.json_in()   # Automatically parses incoming JSON
    @cherrypy.tools.json_out()
    def add(self):
        new_todo = cherrypy.request.json  # Gets the incoming JSON body
        todos.append(new_todo)
        return {'message': 'To-do added successfully', 'todo': new_todo}

    @cherrypy.expose
    @cherrypy.tools.json_in()
    @cherrypy.tools.json_out()
    def update(self, todo_id):
        updated_data = cherrypy.request.json
        todo_id = int(todo_id)  # Convert todo_id to an integer
        if 0 <= todo_id < len(todos):
            todos[todo_id] = updated_data
            return {'message': 'To-do updated successfully', 'todo': updated_data}
        return {'message': 'To-do not found'}, 404

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def delete(self, todo_id):
        todo_id = int(todo_id)
        if 0 <= todo_id < len(todos):
            deleted_todo = todos.pop(todo_id)
            return {'message': 'To-do deleted successfully', 'todo': deleted_todo}
        return {'message': 'To-do not found'}, 404

if __name__ == '__main__':
    cherrypy.config.update({'server.socket_host': '127.0.0.1', 'server.socket_port': 8080})
    cherrypy.quickstart(TodoAPI())

কোড ব্যাখ্যা:

  • GET (index): / রুটের মাধ্যমে সমস্ত টু-ডো আইটেম রিট্রিভ করা হবে।
  • POST (add): /add রুটে নতুন টু-ডো যোগ করা যাবে। এটি JSON ফরম্যাটে ইনপুট নেয়।
  • PUT (update): /update/<todo_id> রুটে টু-ডো আইটেম আপডেট করা যাবে।
  • DELETE (delete): /delete/<todo_id> রুটে টু-ডো আইটেম মুছে ফেলা যাবে।

উদাহরণ: API রিকোয়েস্ট

  1. GET রিকোয়েস্ট:

    • URL: http://127.0.0.1:8080/
    • রেসপন্স: একটি JSON অ্যারে যা সমস্ত টু-ডো আইটেম দেখাবে।
    []
    
  2. POST রিকোয়েস্ট:

    • URL: http://127.0.0.1:8080/add
    • বডি: { "task": "Learn CherryPy" }
    • রেসপন্স:
    {
        "message": "To-do added successfully",
        "todo": { "task": "Learn CherryPy" }
    }
    
  3. PUT রিকোয়েস্ট:

    • URL: http://127.0.0.1:8080/update/0
    • বডি: { "task": "Learn CherryPy with API" }
    • রেসপন্স:
    {
        "message": "To-do updated successfully",
        "todo": { "task": "Learn CherryPy with API" }
    }
    
  4. DELETE রিকোয়েস্ট:

    • URL: http://127.0.0.1:8080/delete/0
    • রেসপন্স:
    {
        "message": "To-do deleted successfully",
        "todo": { "task": "Learn CherryPy with API" }
    }
    

CherryPy তে RESTful API এর কনফিগারেশন এবং নিরাপত্তা

CORS (Cross-Origin Resource Sharing) সমর্থন

একটি ওয়েব অ্যাপ্লিকেশন যখন ভিন্ন ডোমেইন থেকে API রিকোয়েস্ট পাঠায়, তখন CORS অনুমতি প্রয়োজন হয়। CherryPy তে CORS সক্রিয় করতে নিচের কনফিগারেশন করা যেতে পারে:

cherrypy.tools.cors = cherrypy.Tool('before_handler', lambda: cherrypy.response.headers.update({
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE'
}))

নিরাপত্তা (Authentication) যোগ করা

RESTful API তে নিরাপত্তা নিশ্চিত করার জন্য Basic Authentication বা Token-based Authentication ব্যবহার করা যেতে পারে।

উদাহরণ: Basic Authentication

import cherrypy
from cherrypy.lib import auth

class SecureAPI:
    def __init__(self):
        self.auth = auth.BasicAuth()

    @cherrypy.expose
    @cherrypy.tools.auth.basic_auth(realm='Private Area', users={'admin': 'password'})
    def index(self):
        return "আপনার অ্যাক্সেস অনুমোদিত।"

if __name__ == '__main__':
    cherrypy.quickstart(SecureAPI())

এখানে:

  • @cherrypy.tools.auth.basic_auth ব্যবহার করে Basic Authentication যোগ করা হয়েছে।
  • users={'admin': 'password'}: ব্যবহারকারী এবং পাসওয়ার্ড কনফিগার করা হয়েছে।

CherryPy তে RESTful API ডেভেলপমেন্ট খুবই সহজ এবং দ্রুত করা যায়। CherryPy এর সিম্পল কোড স্ট্রাকচার এবং কার্যকর কনফিগারেশন ফিচারের মাধ্যমে আপনি খুব দ্রুত API তৈরি করতে পারেন। CherryPy এর JSON সমর্থন এবং HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে RESTful API তৈরি করা সম্ভব। API নিরাপত্তার জন্য আপনি CORS এবং Basic Authentication এর মতো টুলস ব্যবহার করতে পারেন। CherryPy এর সাহায্যে আপনি আধুনিক ওয়েব সার্ভিস ডেভেলপমেন্টের প্রয়োজনীয় সব ফিচার সহজেই ইমপ্লিমেন্ট করতে পারবেন।

Content added By

REST (Representational State Transfer) API একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিসেসে ব্যাপকভাবে ব্যবহৃত হয়। এটি HTTP প্রটোকল এবং URL স্ট্রাকচার ব্যবহার করে, যা সহজ, লাইটওয়েট এবং স্কেলেবল ওয়েব সার্ভিস তৈরির জন্য আদর্শ। CherryPy, একটি পাইথন-ভিত্তিক ওয়েব ফ্রেমওয়ার্ক, ব্যবহার করে RESTful API তৈরি করা খুবই সহজ।

REST API একটি ক্লায়েন্ট-সার্ভার আর্কিটেকচার অনুসরণ করে, যেখানে ক্লায়েন্ট সার্ভারের সাথে HTTP মেথডের মাধ্যমে যোগাযোগ করে। CherryPy এই প্রক্রিয়া সরল এবং কার্যকরীভাবে পরিচালনা করতে সহায়তা করে।


RESTful API এর মৌলিক ধারণা

RESTful API তৈরি করার জন্য কিছু মৌলিক ধারণা রয়েছে যা আপনাকে API ডিজাইন এবং কনফিগারেশন করতে সাহায্য করবে। এখানে REST API এর কিছু মূল বৈশিষ্ট্য ব্যাখ্যা করা হলো:

১. HTTP মেথডস (GET, POST, PUT, DELETE)

RESTful API সাধারণত ৪টি HTTP মেথড ব্যবহার করে:

  • GET: ডেটা রিট্রিভ করার জন্য ব্যবহার হয় (যেমন, একটি রেকর্ড পড়া)।
  • POST: নতুন ডেটা তৈরি করার জন্য ব্যবহার হয় (যেমন, একটি নতুন রেকর্ড তৈরি করা)।
  • PUT: বিদ্যমান ডেটা আপডেট করার জন্য ব্যবহার হয়।
  • DELETE: ডেটা মুছে ফেলার জন্য ব্যবহার হয়।

২. Stateless (স্টেটলেস)

RESTful API তে প্রতিটি রিকোয়েস্ট সম্পূর্ণভাবে স্বাধীন। সার্ভার কোনও স্টেট (অর্থাৎ পূর্ববর্তী রিকোয়েস্টের তথ্য) সংরক্ষণ করে না। প্রতিটি রিকোয়েস্টের মধ্যে সমস্ত প্রয়োজনীয় ডেটা থাকা উচিত।

৩. Resources (রিসোর্সেস)

RESTful API তে "Resources" হলো যেকোনো তথ্য বা সেবা যা API প্রদানের মাধ্যমে অ্যাক্সেসযোগ্য। প্রতিটি রিসোর্স একটি ইউনিক URL দ্বারা চিহ্নিত করা হয়। উদাহরণস্বরূপ, একটি User রিসোর্সের URL হতে পারে /users

৪. JSON/XML Format (ডেটা ফরম্যাট)

RESTful API সাধারণত JSON (JavaScript Object Notation) বা XML (Extensible Markup Language) ফরম্যাটে ডেটা আদান-প্রদান করে। JSON বর্তমানে সবচেয়ে জনপ্রিয় ডেটা ফরম্যাট হিসাবে ব্যবহৃত হয়।


CherryPy তে REST API তৈরি করা

CherryPy দিয়ে REST API তৈরি করতে খুব সহজ এবং পরিষ্কার। নিচে CherryPy তে একটি RESTful API তৈরি করার মৌলিক উদাহরণ দেখানো হলো।

উদাহরণ: CherryPy তে RESTful API তৈরি

import cherrypy
import json

class RestAPI:
    @cherrypy.expose
    def index(self):
        return "স্বাগতম CherryPy REST API-তে!"

    @cherrypy.expose
    @cherrypy.tools.json_out()  # JSON আউটপুট তৈরি করার জন্য টুল
    def get_users(self):
        users = [
            {"id": 1, "name": "Alice", "email": "alice@example.com"},
            {"id": 2, "name": "Bob", "email": "bob@example.com"}
        ]
        return {"users": users}

    @cherrypy.expose
    @cherrypy.tools.json_in()  # ইনপুট JSON গ্রহণ করার জন্য টুল
    def create_user(self):
        user_data = cherrypy.request.json  # JSON ডেটা গ্রহণ
        user_id = 3  # সাধারণত ডাটাবেস থেকে আইডি তৈরি করা হয়
        return json.dumps({"message": "User created", "user_id": user_id, "data": user_data})

    @cherrypy.expose
    def delete_user(self, user_id):
        return json.dumps({"message": f"User {user_id} deleted"})

if __name__ == '__main__':
    cherrypy.quickstart(RestAPI())

কোড ব্যাখ্যা:

  • @cherrypy.expose: CherryPy মেথডগুলিকে URL পাথের সাথে সংযুক্ত করে।
  • @cherrypy.tools.json_out(): এই টুলটি মেথডের আউটপুটকে JSON ফরম্যাটে কনভার্ট করে।
  • @cherrypy.tools.json_in(): এই টুলটি ইনপুট হিসাবে JSON ডেটা গ্রহণ করে।
  • get_users: এটি একটি GET রিকোয়েস্ট হ্যান্ডলিং মেথড, যা ব্যবহারকারীদের তথ্য রিটার্ন করে।
  • create_user: এটি একটি POST রিকোয়েস্ট হ্যান্ডলিং মেথড, যা নতুন ব্যবহারকারী তৈরি করে।
  • delete_user: এটি DELETE রিকোয়েস্ট হ্যান্ডলিং মেথড, যা নির্দিষ্ট একটি ব্যবহারকারী মুছে ফেলে।

রান করার পর:

  1. GET রিকোয়েস্ট (যেমন: http://localhost:8080/get_users) ব্যবহারকারীদের তালিকা রিটার্ন করবে।
  2. POST রিকোয়েস্ট (যেমন: http://localhost:8080/create_user) নতুন ব্যবহারকারী তৈরি করবে।
  3. DELETE রিকোয়েস্ট (যেমন: http://localhost:8080/delete_user/1) ব্যবহারকারী মুছে ফেলবে।

CherryPy তে JSON API তৈরি করা

CherryPy তে JSON API তৈরি করতে, আপনি tools.json_out() এবং tools.json_in() ব্যবহার করতে পারেন। উদাহরণস্বরূপ:

উদাহরণ: JSON API

import cherrypy
import json

class JsonAPI:
    @cherrypy.expose
    @cherrypy.tools.json_out()
    def index(self):
        return {"message": "This is a JSON response"}

    @cherrypy.expose
    @cherrypy.tools.json_in()
    def create_data(self):
        input_data = cherrypy.request.json
        response = {
            "message": "Data received successfully",
            "data": input_data
        }
        return response

if __name__ == '__main__':
    cherrypy.quickstart(JsonAPI())

এখানে:

  • tools.json_out(): আউটপুট হিসেবে JSON রিটার্ন করবে।
  • tools.json_in(): ইনপুট হিসেবে JSON ডেটা গ্রহণ করবে।

ব্রাউজার বা HTTP ক্লায়েন্টের মাধ্যমে API কল:

  1. GET রিকোয়েস্ট: http://localhost:8080 ব্রাউজারে গেলে আপনি JSON আউটপুট দেখতে পাবেন।
  2. POST রিকোয়েস্ট: http://localhost:8080/create_data এ JSON ডেটা পাঠালে, API সেই ডেটাকে গ্রহণ করবে এবং JSON আউটপুট রিটার্ন করবে।

CherryPy তে RESTful API এর জন্য আরও কিছু উন্নত ফিচার

  1. Authentication: CherryPy তে API অথেনটিকেশন বাস্তবায়ন করা যেতে পারে (যেমন Basic Authentication, Token-Based Authentication)।
  2. CORS (Cross-Origin Resource Sharing): API তে CORS সমর্থন প্রদান করতে, যাতে অন্য ডোমেইন থেকে API রিকোয়েস্ট করা যায়।
  3. Error Handling: RESTful API তে সাধারণ HTTP স্ট্যাটাস কোড (যেমন 404 Not Found, 500 Internal Server Error) ব্যবহারের মাধ্যমে ত্রুটি হ্যান্ডলিং করা যায়।
  4. Pagination: বড় ডেটাসেট গুলি পেজিনেট করার জন্য API এ pagination যুক্ত করা যেতে পারে।

CherryPy দিয়ে RESTful API তৈরি করা খুবই সহজ এবং সোজা। CherryPy এর tools.json_out() এবং tools.json_in() টুলস JSON ডেটার সাথে কাজ করার জন্য খুবই কার্যকর। RESTful API ডিজাইন করতে হলে GET, POST, PUT, এবং DELETE মেথডগুলির সঠিক ব্যবহার গুরুত্বপূর্ণ, এবং CherryPy এই কাজটি খুবই সহজ করে তোলে।

Content added By

CherryPy দিয়ে RESTful API তৈরি করা অত্যন্ত সহজ। REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল, যা ওয়েব সার্ভিস এবং API গুলিকে HTTP পদ্ধতি (GET, POST, PUT, DELETE) ব্যবহার করে যোগাযোগ করতে সক্ষম করে। CherryPy তে আপনি RESTful API তৈরি করার জন্য HTTP মেথড সমর্থনকারী মেথডগুলো ব্যবহার করতে পারেন।

এখানে CherryPy ব্যবহার করে একটি সিম্পল RESTful API তৈরি করার প্রক্রিয়া বিস্তারিতভাবে দেখানো হবে।


RESTful API কি?

RESTful API হলো এমন একটি API যা HTTP প্রোটোকল ব্যবহার করে তথ্য আদান-প্রদান করে। সাধারণত, এটি 4টি HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে:

  • GET: ডেটা রিট্রিভ করতে ব্যবহার করা হয়।
  • POST: নতুন ডেটা তৈরি করতে ব্যবহার করা হয়।
  • PUT: বিদ্যমান ডেটা আপডেট করতে ব্যবহার করা হয়।
  • DELETE: ডেটা মুছতে ব্যবহার করা হয়।

CherryPy দিয়ে RESTful API তৈরি করার জন্য প্রথমে CherryPy ইনস্টল করুন

pip install cherrypy

CherryPy দিয়ে একটি সিম্পল RESTful API তৈরি করা

উদাহরণ: RESTful API (GET, POST, PUT, DELETE)

import cherrypy
import json

class MyAPI:
    def __init__(self):
        self.data = {
            1: {'name': 'Alice', 'age': 25},
            2: {'name': 'Bob', 'age': 30}
        }

    # GET মেথড: নির্দিষ্ট ID এর তথ্য রিটার্ন করে
    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_user(self, user_id=None):
        if user_id is None:
            # সব ব্যবহারকারী রিটার্ন
            return self.data
        else:
            user_id = int(user_id)
            return self.data.get(user_id, {'error': 'User not found'})

    # POST মেথড: নতুন ব্যবহারকারী তৈরি
    @cherrypy.expose
    @cherrypy.tools.json_in()
    @cherrypy.tools.json_out()
    def create_user(self):
        user = cherrypy.request.json
        user_id = max(self.data.keys()) + 1
        self.data[user_id] = user
        return {'message': 'User created', 'user_id': user_id}

    # PUT মেথড: বিদ্যমান ব্যবহারকারীর তথ্য আপডেট করা
    @cherrypy.expose
    @cherrypy.tools.json_in()
    @cherrypy.tools.json_out()
    def update_user(self, user_id=None):
        if user_id is None:
            return {'error': 'User ID required'}
        user_id = int(user_id)
        if user_id in self.data:
            user = cherrypy.request.json
            self.data[user_id].update(user)
            return {'message': 'User updated'}
        else:
            return {'error': 'User not found'}

    # DELETE মেথড: ব্যবহারকারী মুছতে
    @cherrypy.expose
    @cherrypy.tools.json_out()
    def delete_user(self, user_id=None):
        if user_id is None:
            return {'error': 'User ID required'}
        user_id = int(user_id)
        if user_id in self.data:
            del self.data[user_id]
            return {'message': 'User deleted'}
        else:
            return {'error': 'User not found'}

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

ব্যাখ্যা:

  • @cherrypy.expose: এই ডেকোরেটরটি CherryPy এর মাধ্যমে HTTP রিকোয়েস্ট হ্যান্ডেল করার জন্য ব্যবহৃত হয়।
  • @cherrypy.tools.json_out(): এই টুলটি JSON আউটপুট রিটার্ন করতে ব্যবহৃত হয়।
  • @cherrypy.tools.json_in(): এই টুলটি ইনপুট হিসেবে JSON ডেটা গ্রহণ করতে ব্যবহৃত হয়।
  • self.data: একটি ডিকশনারির মাধ্যমে স্টোর করা ডেমো ডেটা।

মেথডসমূহ:

  1. GET /users/{id}: নির্দিষ্ট ব্যবহারকারীর ডেটা রিটার্ন করবে। যদি ID না দেওয়া হয়, তাহলে সমস্ত ব্যবহারকারীর তালিকা রিটার্ন করবে।
  2. POST /users: নতুন ব্যবহারকারী তৈরি করবে।
  3. PUT /users/{id}: নির্দিষ্ট ব্যবহারকারীর তথ্য আপডেট করবে।
  4. DELETE /users/{id}: নির্দিষ্ট ব্যবহারকারী মুছে ফেলবে।

API পরীক্ষা করা

1. GET: সমস্ত ব্যবহারকারীর তালিকা দেখুন

GET http://127.0.0.1:8080/get_user

2. GET: নির্দিষ্ট ব্যবহারকারী দেখুন

GET http://127.0.0.1:8080/get_user/1

3. POST: নতুন ব্যবহারকারী তৈরি করুন

curl -X POST http://127.0.0.1:8080/create_user -H "Content-Type: application/json" -d '{"name": "Charlie", "age": 35}'

4. PUT: ব্যবহারকারীর তথ্য আপডেট করুন

curl -X PUT http://127.0.0.1:8080/update_user/2 -H "Content-Type: application/json" -d '{"name": "Bob", "age": 31}'

5. DELETE: ব্যবহারকারী মুছুন

curl -X DELETE http://127.0.0.1:8080/delete_user/1

CherryPy RESTful API এর সুবিধা:

  1. সহজ এবং দ্রুত সেটআপ: CherryPy এর সাথে RESTful API তৈরি করা দ্রুত এবং সহজ।
  2. JSON হ্যান্ডলিং: CherryPy JSON ইনপুট এবং আউটপুট সাপোর্ট করে, যা API ডেভেলপমেন্টে খুবই উপকারী।
  3. ফ্লেক্সিবিলিটি: CherryPy দিয়ে RESTful API খুবই নমনীয়ভাবে কাস্টমাইজ করা যায় এবং সহজে সেলফ-ডকুমেন্টিং তৈরি করা সম্ভব।

CherryPy ব্যবহার করে আপনি সহজেই RESTful API তৈরি করতে পারেন যা HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে ডেটা পরিচালনা করতে সক্ষম। CherryPy এর সিম্পল সিনট্যাক্স এবং JSON টুলস এর মাধ্যমে দ্রুত ও কার্যকরী API তৈরি সম্ভব।

Content added By

CherryPy একটি Python-ভিত্তিক ওয়েব ফ্রেমওয়ার্ক যা HTTP Methods (GET, POST, PUT, DELETE) সমর্থন করে। এই HTTP Methods গুলি ওয়েব সার্ভিস বা অ্যাপ্লিকেশনগুলির মধ্যে বিভিন্ন ধরনের রিকোয়েস্ট এবং রেসপন্স পরিচালনা করতে ব্যবহৃত হয়। CherryPy এ এই HTTP Methods ব্যবহার করে আপনি আপনার ওয়েব অ্যাপ্লিকেশনটি ডাইনামিক এবং কার্যকরীভাবে পরিচালনা করতে পারেন।

এই HTTP Methods গুলি সাধারণত ওয়েব অ্যাপ্লিকেশনের বিভিন্ন রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য ব্যবহার করা হয়।


GET Method

GET মেথডটি HTTP রিকোয়েস্টের জন্য সবচেয়ে সাধারণ এবং ব্যবহৃত পদ্ধতি। এটি মূলত ডেটা রিট্রিভ করতে ব্যবহৃত হয় এবং URL-এর মাধ্যমে প্যারামিটার পাস করা হয়। GET মেথডের মাধ্যমে সাধারণত ডেটা সার্ভার থেকে ক্লায়েন্টে পাঠানো হয়, যেমন HTML পেজ, JSON বা অন্য কোনো রেসপন্স।

উদাহরণ: GET Method

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return "GET Method Example"

    @cherrypy.expose
    def greet(self, name="Guest"):
        return f"Hello, {name}!"

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

এখানে:

  • /greet?name=John এর মাধ্যমে GET প্যারামিটার পাস করা হবে এবং "Hello, John!" রেসপন্স দেখাবে।

POST Method

POST মেথডটি ডেটা সার্ভারে পাঠাতে ব্যবহৃত হয়। এটি সাধারণত ফর্ম ডেটা, লগইন তথ্য বা অন্যান্য সংবেদনশীল ডেটা পাঠাতে ব্যবহৃত হয়, যা URL-এ দেখা যায় না এবং সার্ভারে সুরক্ষিত থাকে।

উদাহরণ: POST Method

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return '''<form method="post" action="greet">
                    Name: <input type="text" name="name"/>
                    <button type="submit">Submit</button>
                  </form>'''

    @cherrypy.expose
    def greet(self, name="Guest"):
        return f"Hello, {name}!"

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

এখানে, POST মেথড ব্যবহার করে ফর্ম ডেটা সার্ভারে পাঠানো হচ্ছে। যখন আপনি submit করবেন, আপনার name প্যারামিটার POST রিকোয়েস্টের মাধ্যমে সার্ভারে পাঠানো হবে এবং রেসপন্সে "Hello, [name]" দেখাবে।


PUT Method

PUT মেথডটি মূলত সার্ভারে কোনো সম্পদ (resource) আপডেট বা তৈরি করতে ব্যবহৃত হয়। PUT রিকোয়েস্টে ডেটা সার্ভারে আপলোড করা হয় এবং সম্পদটির সম্পূর্ণ তথ্য থাকে।

উদাহরণ: PUT Method

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return "PUT Method Example"

    @cherrypy.expose
    def update(self, name="Guest"):
        return f"Data updated for {name}."

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

PUT মেথডের মাধ্যমে আপনি একটি রিসোর্স আপডেট বা তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি /update?name=John এ PUT রিকোয়েস্ট পাঠাতে পারেন এবং "Data updated for John." এই রেসপন্স পাবেন।


DELETE Method

DELETE মেথডটি কোনো নির্দিষ্ট সম্পদ (resource) মুছে ফেলতে ব্যবহৃত হয়। এটি একটি HTTP রিকোয়েস্ট যেখানে সম্পদের URL দেয়া থাকে এবং এটি ঐ সম্পদটি সার্ভার থেকে মুছে ফেলে।

উদাহরণ: DELETE Method

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return "DELETE Method Example"

    @cherrypy.expose
    def delete(self, name="Guest"):
        return f"Resource {name} deleted."

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

এখানে, DELETE রিকোয়েস্টের মাধ্যমে আপনি /delete?name=John পাথের জন্য একটি সম্পদ মুছে ফেলতে পারেন। এই রিকোয়েস্টটি "Resource John deleted." রেসপন্স দেয়।


CherryPy তে HTTP Methods পরিচালনা

CherryPy তে আপনি একটি একক মেথডের মাধ্যমে HTTP মেথড পরিচালনা করতে পারেন। CherryPy এর @cherrypy.expose ডেকোরেটর ব্যবহার করে আপনি GET, POST, PUT, DELETE মেথডগুলোকে নির্দিষ্টভাবে রাউট করতে পারেন।

উদাহরণ: HTTP Methods এর কাস্টম হ্যান্ডলিং

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return "Welcome to CherryPy!"

    @cherrypy.expose
    def greet(self, name="Guest"):
        if cherrypy.request.method == 'POST':
            return f"Hello, {name} (POST method)"
        else:
            return f"Hello, {name} (GET method)"

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

এখানে, greet রুটটি GET এবং POST মেথডের জন্য আলাদা রেসপন্স প্রদান করবে। POST মেথডের জন্য রেসপন্সে "Hello, [name] (POST method)" দেখাবে, আর GET মেথডের জন্য "Hello, [name] (GET method)" দেখাবে।


CherryPy এর জন্য HTTP Methods Configuration

CherryPy তে HTTP Methods কনফিগার করতে আপনি কাস্টম টুলস বা ফিল্টার ব্যবহার করতে পারেন, যা আপনাকে মেথডের আচরণ নিয়ন্ত্রণ করতে সাহায্য করে।

উদাহরণ: কাস্টম টুলের মাধ্যমে HTTP Methods কনফিগারেশন

import cherrypy

class MyApp:
    @cherrypy.expose
    def index(self):
        return "Welcome to CherryPy!"

    @cherrypy.expose
    def post_data(self, data=""):
        if cherrypy.request.method == 'POST':
            return f"Data received: {data}"
        else:
            raise cherrypy.HTTPError(405, "Method Not Allowed")

if __name__ == '__main__':
    cherrypy.quickstart(MyApp())

এখানে 405 Method Not Allowed ত্রুটি ধরা হবে যদি ক্লায়েন্ট POST রিকোয়েস্ট না পাঠায়।


CherryPy তে HTTP Methods (GET, POST, PUT, DELETE) ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনের ডেটা রিকোয়েস্ট এবং রেসপন্স ম্যানেজমেন্ট সহজভাবে করতে পারেন। CherryPy এর মাধ্যমে আপনি সহজেই এই মেথডগুলোকে রাউটিং, ডাইনামিক প্যারামিটার প্রক্রিয়াকরণ, এবং কাস্টম রেসপন্স তৈরির জন্য ব্যবহার করতে পারবেন।

Content added By

CherryPy একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যা API রাউটিং এবং ডাইনামিক JSON/XML রেসপন্স তৈরি করতে খুবই উপযোগী। CherryPy ব্যবহার করে আপনি সহজেই RESTful API তৈরি করতে পারেন এবং প্রয়োজন অনুযায়ী JSON বা XML ফরম্যাটে রেসপন্স পাঠাতে পারেন।

এখানে আমরা CherryPy তে API Routing এবং JSON/XML Response তৈরি করার পদ্ধতি আলোচনা করব।


১. API Routing (RESTful API)

CherryPy তে API রাউটিং সহজ এবং নমনীয়। আপনি @cherrypy.expose ডেকোরেটর ব্যবহার করে বিভিন্ন API রুট তৈরি করতে পারেন। CherryPy রাউটিং আপনাকে API এন্ডপয়েন্ট তৈরি এবং URL পাথের জন্য রিসোর্সগুলি পরিচালনা করতে সাহায্য করে।

উদাহরণ: RESTful API Routing

import cherrypy

class MyAPI:
    @cherrypy.expose
    def index(self):
        return "API এর জন্য স্বাগতম!"

    @cherrypy.expose
    def user(self, user_id):
        return f"এটি ইউজার {user_id} এর পেজ।"

    @cherrypy.expose
    def products(self):
        return "এটি প্রোডাক্ট API এর পেজ।"

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

এখানে:

  • index রুটটি / পাথের জন্য।
  • user রুটটি /user/<user_id> পাথের জন্য কাজ করবে।
  • products রুটটি /products পাথের জন্য কাজ করবে।

২. JSON Response তৈরি করা

CherryPy তে JSON রেসপন্স তৈরি করতে আপনি Python এর json লাইব্রেরি ব্যবহার করতে পারেন। API রাউট থেকে ডাটা JSON ফরম্যাটে ফেরত দিতে cherrypy.response.headers['Content-Type'] সেট করতে হয়।

উদাহরণ: JSON Response তৈরি করা

import cherrypy
import json

class MyAPI:
    @cherrypy.expose
    def index(self):
        data = {"message": "API এর জন্য স্বাগতম!"}
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps(data)

    @cherrypy.expose
    def user(self, user_id):
        user_data = {
            "user_id": user_id,
            "name": "John Doe",
            "email": "johndoe@example.com"
        }
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps(user_data)

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

এখানে:

  • index রুট JSON রেসপন্স হিসেবে "message": "API এর জন্য স্বাগতম!" পাঠায়।
  • user রুট ব্যবহারকারীর আইডি অনুযায়ী একটি JSON ডেটা ফেরত পাঠায়।

৩. XML Response তৈরি করা

XML রেসপন্স তৈরির জন্য Python এর xml.etree.ElementTree লাইব্রেরি ব্যবহার করা যেতে পারে। CherryPy তে, JSON রেসপন্সের মতোই XML রেসপন্স তৈরি করতে cherrypy.response.headers['Content-Type'] সেট করতে হবে।

উদাহরণ: XML Response তৈরি করা

import cherrypy
import xml.etree.ElementTree as ET

class MyAPI:
    @cherrypy.expose
    def index(self):
        response_data = ET.Element('response')
        message = ET.SubElement(response_data, 'message')
        message.text = "API এর জন্য স্বাগতম!"
        
        cherrypy.response.headers['Content-Type'] = 'application/xml'
        return ET.tostring(response_data, encoding='unicode')

    @cherrypy.expose
    def user(self, user_id):
        response_data = ET.Element('user')
        user = ET.SubElement(response_data, 'id')
        user.text = user_id
        name = ET.SubElement(response_data, 'name')
        name.text = "John Doe"
        email = ET.SubElement(response_data, 'email')
        email.text = "johndoe@example.com"
        
        cherrypy.response.headers['Content-Type'] = 'application/xml'
        return ET.tostring(response_data, encoding='unicode')

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

এখানে:

  • index রুট XML রেসপন্স হিসেবে "message": "API এর জন্য স্বাগতম!" পাঠায়।
  • user রুট ব্যবহারকারীর তথ্য XML ফরম্যাটে ফেরত পাঠায়।

৪. Query Parameters এবং JSON/XML Response

CherryPy তে আপনি URL এর সাথে query parameters পাঠিয়ে ডেটা প্রসেস করতে পারেন এবং JSON বা XML রেসপন্স ফিরিয়ে দিতে পারেন।

উদাহরণ: Query Parameters ব্যবহার করে JSON Response তৈরি

import cherrypy
import json

class MyAPI:
    @cherrypy.expose
    def index(self, name="Guest"):
        data = {"message": f"স্বাগতম, {name}!"}
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps(data)

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

এখানে, আপনি http://127.0.0.1:8080/index?name=John দিয়ে JSON রেসপন্স হিসেবে "message": "স্বাগতম, John!" পেতে পারেন।


৫. HTTP Methods (GET, POST, PUT, DELETE) ব্যবহার

CherryPy তে HTTP methods (GET, POST, PUT, DELETE) সমর্থিত, যা API রাউটিংয়ের জন্য ব্যবহৃত হয়। আপনি @cherrypy.expose ডেকোরেটরের মাধ্যমে নির্দিষ্ট HTTP method এর জন্য রাউট তৈরি করতে পারেন।

উদাহরণ: HTTP Methods ব্যবহার করে API

import cherrypy
import json

class MyAPI:
    @cherrypy.expose
    def index(self):
        return "এটি একটি GET রিকোয়েস্টের রেসপন্স!"

    @cherrypy.expose
    @cherrypy.tools.allow(methods=['POST'])
    def post_data(self, data=None):
        response_data = {"message": "POST রিকোয়েস্ট সফল!", "received_data": data}
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps(response_data)

if __name__ == '__main__':
    cherrypy.quickstart(MyAPI())

এখানে:

  • index রুট GET রিকোয়েস্টের জন্য রেসপন্স প্রদান করে।
  • post_data রুট POST রিকোয়েস্টের জন্য ডেটা গ্রহণ করে এবং JSON রেসপন্স প্রদান করে।

CherryPy তে API Routing এবং JSON/XML Response তৈরি করা খুবই সহজ এবং শক্তিশালী। CherryPy এর @cherrypy.expose ডেকোরেটর এবং HTTP methods এর মাধ্যমে আপনি RESTful API তৈরি করতে পারেন এবং JSON/XML রেসপন্স প্রদান করতে পারেন। CherryPy এর এই বৈশিষ্ট্যগুলি আপনাকে একটি শক্তিশালী, সাশ্রয়ী এবং সিম্পল API তৈরি করতে সহায়তা করবে।

Content added By
Promotion

Are you sure to start over?

Loading...