Spring Boot এর Controller এবং REST API

Java Technologies - স্প্রিং বুট (Spring Boot)
119
119

Spring Boot এর Controller কি?

স্প্রিং বুটের কন্ট্রোলার (Controller) হলো একটি ক্লাস যা HTTP রিকোয়েস্টের জন্য হ্যান্ডলার হিসেবে কাজ করে। এটি মূলত ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করে এবং সেগুলোর জন্য উপযুক্ত রেসপন্স প্রদান করে। কন্ট্রোলারের মধ্যে মেথডগুলি @RequestMapping অথবা এর বিভিন্ন এনোটেশন (যেমন @GetMapping, @PostMapping, @PutMapping, @DeleteMapping) ব্যবহার করে HTTP রিকোয়েস্টের ধরন অনুযায়ী পরিচালনা করা হয়।

স্প্রিং বুট কন্ট্রোলার সাধারণত REST API তৈরি করতে ব্যবহৃত হয়, যেখানে একাধিক HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে বিভিন্ন কার্যাবলী সম্পাদন করা হয়।

Controller এর একটি সাধারণ উদাহরণ:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/greet")
    public String greet() {
        return "Hello, Welcome to Spring Boot!";
    }

    @PostMapping("/create")
    public String create() {
        return "Data Created Successfully!";
    }
}

এখানে @RestController অ্যানোটেশনটি কন্ট্রোলারকে RESTful Web Service হিসেবে নির্দেশ করে, যা JSON অথবা XML রেসপন্স প্রদান করতে সক্ষম। @GetMapping এবং @PostMapping অ্যানোটেশন ব্যবহার করে GET এবং POST HTTP রিকোয়েস্টের জন্য মেথড ডিফাইন করা হয়েছে।

Spring Boot REST API

REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা HTTP প্রোটোকলের মাধ্যমে ডেটা স্থানান্তর করতে ব্যবহৃত হয়। স্প্রিং বুটের মাধ্যমে খুব সহজেই REST API তৈরি করা যায়। এটি ডেভেলপারদেরকে কাস্টম রিকোয়েস্ট হ্যান্ডলার তৈরি করার জন্য সহজ উপায় দেয় এবং নির্দিষ্ট রিকোয়েস্ট টাইপের জন্য মেথড ম্যানেজ করার সুবিধা প্রদান করে।

স্প্রিং বুট REST API তৈরি করতে হলে কিছু গুরুত্বপূর্ণ অ্যানোটেশন এবং কনফিগারেশন ব্যবহার করা হয়, যেমন @GetMapping, @PostMapping, @RequestParam, @RequestBody, ইত্যাদি। নিচে REST API তৈরি করার প্রক্রিয়া ব্যাখ্যা করা হলো।


Spring Boot REST API তৈরি করার উদাহরণ

ধরা যাক, আপনি একটি সিম্পল Employee নামক অবজেক্ট দিয়ে REST API তৈরি করতে চান, যেখানে বিভিন্ন HTTP মেথড ব্যবহার করে CRUD অপারেশন করা হবে।

১. Employee Entity Class তৈরি করা

প্রথমে Employee নামক একটি Entity ক্লাস তৈরি করা হবে, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে।

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;

    // getters and setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

২. Employee Repository তৈরি করা

এখন Employee অবজেক্টের জন্য একটি JpaRepository রেপোজিটরি তৈরি করতে হবে, যা ডেটাবেসের সাথে কাজ করবে।

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

৩. Employee Service তৈরি করা

এখন EmployeeService ক্লাস তৈরি করতে হবে, যা EmployeeRepository ব্যবহার করে ডেটাবেসে CRUD অপারেশন পরিচালনা করবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    public Optional<Employee> getEmployeeById(Long id) {
        return employeeRepository.findById(id);
    }

    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    public void deleteEmployee(Long id) {
        employeeRepository.deleteById(id);
    }
}

৪. REST API Controller তৈরি করা

এখন, EmployeeController ক্লাস তৈরি করতে হবে, যা HTTP রিকোয়েস্ট হ্যান্ডল করবে এবং সার্ভিস ক্লাসের মাধ্যমে ডেটাবেসে অপারেশন করবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    @GetMapping("/{id}")
    public Optional<Employee> getEmployeeById(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }

    @PostMapping
    public Employee createEmployee(@RequestBody Employee employee) {
        return employeeService.saveEmployee(employee);
    }

    @DeleteMapping("/{id}")
    public void deleteEmployee(@PathVariable Long id) {
        employeeService.deleteEmployee(id);
    }
}

এখানে:

  • @GetMapping ব্যবহার করে সমস্ত Employee অবজেক্ট রিটার্ন করা হচ্ছে।
  • @GetMapping("/{id}") ব্যবহার করে একটি নির্দিষ্ট Employee অবজেক্ট ID এর মাধ্যমে রিটার্ন করা হচ্ছে।
  • @PostMapping ব্যবহার করে নতুন Employee তৈরি করা হচ্ছে।
  • @DeleteMapping("/{id}") ব্যবহার করে একটি নির্দিষ্ট Employee ID দিয়ে মুছে ফেলা হচ্ছে।

৫. অ্যাপ্লিকেশন চালানো

এখন আপনি স্প্রিং বুট অ্যাপ্লিকেশন চালাতে পারবেন এবং Postman বা ব্রাউজার ব্যবহার করে নিম্নলিখিত API রিকোয়েস্ট করতে পারবেন:

  • GET /api/employees – সমস্ত কর্মচারীর তথ্য পাবেন।
  • GET /api/employees/{id} – নির্দিষ্ট কর্মচারীর তথ্য পাবেন।
  • POST /api/employees – নতুন কর্মচারী তৈরি করবেন।
  • DELETE /api/employees/{id} – নির্দিষ্ট কর্মচারী মুছে ফেলবেন।

সারাংশ

স্প্রিং বুটের মাধ্যমে REST API তৈরি করা খুবই সহজ এবং দ্রুত হয়। @RestController, @RequestMapping, @GetMapping, @PostMapping ইত্যাদি অ্যানোটেশন ব্যবহার করে আপনি স্পষ্টভাবে HTTP রিকোয়েস্টের জন্য মেথড নির্ধারণ করতে পারবেন। ডেটাবেস ইন্টিগ্রেশন এবং CRUD অপারেশনও সহজে সম্পাদন করা সম্ভব। এর মাধ্যমে আপনি খুব দ্রুত কার্যকরী REST API তৈরি করতে পারবেন যা বাস্তব অ্যাপ্লিকেশনের জন্য অত্যন্ত উপযোগী।

Content added By

@RestController এবং @RequestMapping এর ব্যবহার

91
91

Spring Boot একটি জনপ্রিয় ফ্রেমওয়ার্ক যা Java এ ওয়েব অ্যাপ্লিকেশন এবং RESTful সার্ভিস তৈরি করতে ব্যবহৃত হয়। Spring Boot এ API তৈরি করতে অনেক সহজ এবং স্বয়ংক্রিয় কনফিগারেশন থাকে। দুটি গুরুত্বপূর্ণ অ্যানোটেশন যা ওয়েব অ্যাপ্লিকেশন এবং RESTful সার্ভিসে ব্যবহৃত হয়, তা হলো @RestController এবং @RequestMapping। চলুন এগুলোর ব্যবহার এবং উদ্দেশ্য নিয়ে আলোচনা করি।


@RestController অ্যানোটেশন

@RestController অ্যানোটেশনটি Spring MVC (Model-View-Controller) এর অংশ এবং এটি একটি কনভিনিয়েন্ট ডিফাইনেশন যা @Controller এবং @ResponseBody অ্যানোটেশনগুলির সংমিশ্রণ। এর মাধ্যমে, Spring Boot অ্যাপ্লিকেশনকে RESTful ওয়েব সার্ভিস হিসেবে তৈরি করা হয়, যেখানে প্রতিটি রিকোয়েস্টের জন্য ডেটা JSON বা XML ফর্ম্যাটে রেসপন্স দেওয়া হয়। @RestController অ্যানোটেশন ব্যবহারের ফলে, মেথডের রিটার্ন ভ্যালু স্বয়ংক্রিয়ভাবে HTTP রেসপন্সে পরিণত হয় এবং তা ক্লায়েন্টকে পাঠানো হয়।

@RestController এর ব্যবহার

@RestController
public class UserController {

    @GetMapping("/users")
    public List<User> getUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "John Doe"));
        users.add(new User(2, "Jane Smith"));
        return users;  // Automatically converted to JSON
    }
}

এখানে, @RestController অ্যানোটেশনটি ক্লাসটির উপরে রাখা হয়েছে, যা এটিকে একটি REST API কন্ট্রোলার হিসাবে চিহ্নিত করে। @GetMapping এর মাধ্যমে HTTP GET রিকোয়েস্টের জন্য /users রাউটটি যুক্ত করা হয়েছে। এই রাউটটি যখন কল হবে, তখন একটি JSON ফর্ম্যাটে ইউজারদের ডেটা রিটার্ন হবে।


@RequestMapping অ্যানোটেশন

@RequestMapping অ্যানোটেশনটি Spring MVC এর একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা HTTP রিকোয়েস্টের URL, HTTP মেথড এবং হ্যান্ডলিং মেথডকে ম্যাপ করে। @RequestMapping অ্যানোটেশনটি মেথড লেভেলে বা ক্লাস লেভেলে ব্যবহার করা যেতে পারে। এটি একাধিক HTTP মেথড যেমন GET, POST, PUT, DELETE ইত্যাদি হ্যান্ডল করার জন্য ব্যবহার করা যেতে পারে।

@RequestMapping এর সিঙ্কট্যাক্স:

@RequestMapping(value = "/endpoint", method = RequestMethod.GET)
public ResponseEntity<String> handleRequest() {
    return new ResponseEntity<>("Hello World", HttpStatus.OK);
}

এখানে, /endpoint URL এবং GET HTTP মেথডের জন্য handleRequest() মেথডটি ম্যাপ করা হয়েছে। এই মেথডটি "Hello World" স্ট্রিং রিটার্ন করবে এবং HTTP স্ট্যাটাস 200 (OK) সহ রেসপন্স পাঠাবে।

@RequestMapping এর ব্যবহার উদাহরণ

@RestController
@RequestMapping("/api/users")
public class UserController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<User> getUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "John Doe"));
        users.add(new User(2, "Jane Smith"));
        return users;
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public ResponseEntity<String> addUser(@RequestBody User user) {
        // Logic to add user
        return new ResponseEntity<>("User added successfully", HttpStatus.CREATED);
    }
}

এখানে, @RequestMapping এর মাধ্যমে /api/users/ এ GET এবং POST মেথডের জন্য রিকোয়েস্ট হ্যান্ডেল করা হচ্ছে।


@RequestMapping এবং HTTP মেথড

@RequestMapping অ্যানোটেশনটি যে কোনো HTTP মেথডের সাথে ব্যবহৃত হতে পারে, তবে স্প্রিং বুটে কিছু বিশেষ অ্যানোটেশন রয়েছে যা নির্দিষ্ট HTTP মেথডের জন্য ব্যবহৃত হয়। যেমন:

  • @GetMapping: GET রিকোয়েস্ট হ্যান্ডল করার জন্য।
  • @PostMapping: POST রিকোয়েস্ট হ্যান্ডল করার জন্য।
  • @PutMapping: PUT রিকোয়েস্ট হ্যান্ডল করার জন্য।
  • @DeleteMapping: DELETE রিকোয়েস্ট হ্যান্ডল করার জন্য।
  • @PatchMapping: PATCH রিকোয়েস্ট হ্যান্ডল করার জন্য।

উদাহরণস্বরূপ:

@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/")
    public List<User> getUsers() {
        // Fetch users
    }

    @PostMapping("/")
    public ResponseEntity<String> createUser(@RequestBody User user) {
        // Create user logic
    }
}

এই ক্ষেত্রে, @GetMapping এবং @PostMapping যথাক্রমে GET এবং POST HTTP রিকোয়েস্ট হ্যান্ডল করে।


@RestController এবং @RequestMapping এর মধ্যে পার্থক্য

  • @RestController: এটি একটি কনভিনিয়েন্ট অ্যানোটেশন যা @Controller এবং @ResponseBody অ্যানোটেশনগুলোকে একত্রে সংযুক্ত করে। এটি RESTful সার্ভিসের জন্য ব্যবহৃত হয় এবং এটি যেকোনো মেথডের রিটার্ন ভ্যালুকে HTTP রেসপন্সে রূপান্তর করে।
  • @RequestMapping: এটি ক্লাস বা মেথড লেভেলে ব্যবহৃত হতে পারে এবং একটি নির্দিষ্ট URL পাথ এবং HTTP মেথডের জন্য রিকোয়েস্ট হ্যান্ডলিং মেথড ম্যাপ করে। এটি অনেক বেশি সাধারণ এবং সাধারণভাবে ব্যবহার করা হয়, যদিও Spring 4 থেকে @GetMapping, @PostMapping, @PutMapping ইত্যাদি স্পেসিফিক মেথডগুলোর ব্যবহার বেশি হয়ে থাকে।

সারাংশ

Spring Boot এ @RestController এবং @RequestMapping হল দুটি অত্যন্ত গুরুত্বপূর্ণ অ্যানোটেশন যা RESTful API এবং ওয়েব অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়। @RestController একটি কনভিনিয়েন্ট অ্যানোটেশন যা সার্ভিসের আউটপুটকে JSON বা XML এ রূপান্তরিত করে এবং @RequestMapping URL, HTTP মেথড, এবং কন্ট্রোলারের মধ্যে সংযোগ তৈরি করে। নতুন স্প্রিং বুট সংস্করণে @GetMapping, @PostMapping, @PutMapping ইত্যাদি অ্যানোটেশনগুলো ব্যবহারের মাধ্যমে কোড আরও পরিষ্কার এবং সহজ হতে পারে।


Content added By

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

105
105

Spring Boot ব্যবহার করে ওয়েব অ্যাপ্লিকেশন ডেভেলপ করার সময়, HTTP methods (GET, POST, PUT, DELETE) গুরুত্বপূর্ণ ভূমিকা পালন করে। HTTP methods ওয়েব সার্ভিসের রিকোয়েস্ট এবং রেসপন্স পরিচালনা করার জন্য ব্যবহৃত হয়। এখানে আমরা স্প্রিং বুটে এই HTTP methods এর ব্যবহার নিয়ে বিস্তারিত আলোচনা করব।


HTTP Methods কি?

HTTP (HyperText Transfer Protocol) বিভিন্ন ধরনের রিকোয়েস্ট তৈরি করতে সাহায্য করে, যার মাধ্যমে ক্লায়েন্ট (যেমন, ওয়েব ব্রাউজার) সার্ভারের সাথে যোগাযোগ করতে পারে। প্রধান HTTP methods গুলি হল:

  1. GET: ডেটা নেওয়ার জন্য ব্যবহৃত হয়।
  2. POST: নতুন ডেটা তৈরি বা পাঠানোর জন্য ব্যবহৃত হয়।
  3. PUT: বিদ্যমান ডেটা আপডেট করার জন্য ব্যবহৃত হয়।
  4. DELETE: ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়।

Spring Boot এ, এগুলি মূলত RESTful API তৈরির জন্য ব্যবহৃত হয়।


GET Method

GET method সাধারণত ডেটা ফেরত পাঠানোর জন্য ব্যবহৃত হয়। এটি সার্ভারের কাছে কোনো ডেটা চাওয়ার জন্য ব্যবহার করা হয়, কিন্তু এটি ডেটাবেসে কোনো পরিবর্তন আনে না।

উদাহরণ

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // এখানে ডেটাবেস থেকে ইউজারের তথ্য ফেরত দেওয়া হবে
        return userService.getUserById(id);
    }
}

এখানে /users/{id} URL এর মাধ্যমে নির্দিষ্ট ইউজারের তথ্য গেট করা হচ্ছে।


POST Method

POST method ডেটা তৈরি বা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত ফর্ম সাবমিশন বা নতুন রিসোর্স তৈরি করার সময় এটি ব্যবহার করা হয়।

উদাহরণ

@RestController
@RequestMapping("/api")
public class UserController {

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // এখানে নতুন ইউজার ডেটা তৈরি করা হবে
        return userService.saveUser(user);
    }
}

এখানে @RequestBody ব্যবহার করা হয়েছে, যা ক্লায়েন্ট থেকে আসা JSON ডেটাকে User অবজেক্টে কনভার্ট করে। এই POST রিকোয়েস্ট নতুন ইউজার তৈরি করে।


PUT Method

PUT method ডেটা সম্পূর্ণভাবে আপডেট করার জন্য ব্যবহৃত হয়। এটি সাধারণত একটি রিসোর্সের সব তথ্য আপডেট করতে ব্যবহার হয়।

উদাহরণ

@RestController
@RequestMapping("/api")
public class UserController {

    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // এখানে নির্দিষ্ট ইউজারকে আপডেট করা হবে
        return userService.updateUser(id, user);
    }
}

এখানে PUT রিকোয়েস্ট ব্যবহার করে একটি নির্দিষ্ট ইউজারের তথ্য আপডেট করা হচ্ছে। @PathVariable থেকে id নেওয়া হচ্ছে এবং @RequestBody থেকে নতুন ডেটা নেওয়া হচ্ছে।


DELETE Method

DELETE method ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। এটি সার্ভারে কোনো রিসোর্স মুছে ফেলার জন্য ব্যবহৃত হয়, যেমন ইউজার বা পণ্য ডিলিট করা।

উদাহরণ

@RestController
@RequestMapping("/api")
public class UserController {

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        // এখানে ইউজার ডিলিট করা হবে
        userService.deleteUser(id);
    }
}

এখানে DELETE রিকোয়েস্ট ব্যবহার করে একটি নির্দিষ্ট ইউজারকে মুছে ফেলা হচ্ছে।


সারাংশ

Spring Boot এ HTTP methods (GET, POST, PUT, DELETE) ওয়েব সার্ভিস তৈরির ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ। GET ডেটা নেওয়ার জন্য, POST নতুন ডেটা তৈরি করার জন্য, PUT বিদ্যমান ডেটা আপডেট করার জন্য এবং DELETE ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। এই HTTP methods এর মাধ্যমে স্প্রিং বুটে RESTful API ডেভেলপমেন্ট খুবই সহজ এবং কার্যকরী হয়।

Content added By

Path Variables এবং Request Parameters

90
90

স্প্রিং বুট (Spring Boot) ওয়েব ডেভেলপমেন্টে সাধারণত Path Variables এবং Request Parameters ব্যবহৃত হয়। এগুলো HTTP রিকোয়েস্টের সাথে ইনপুট প্যারামিটার হিসেবে কাজ করে এবং সার্ভার সাইডে বিভিন্ন ডেটা প্রক্রিয়াকরণে সহায়তা করে।


Path Variables

Path Variables হল URL পাথের অংশ হিসেবে ডেটা পাঠানো। সাধারণত, RESTful API ডিজাইনে এটি ব্যবহৃত হয়, যেখানে URL পাথের মধ্যে ডায়নামিক ডেটা পাঠানো হয় এবং সেই ডেটা সার্ভার সাইডে প্রক্রিয়া করা হয়।

Path Variables এর উদাহরণ:

ধরা যাক, আপনি একটি API তৈরি করতে চান যা একটি নির্দিষ্ট আইডি ব্যবহারকারীকে খুঁজে বের করবে। এর জন্য আপনি একটি URL পাথের মধ্যে ব্যবহারকারীর আইডি পাঠাবেন।

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUserById(@PathVariable("id") Long userId) {
        return "User ID: " + userId;
    }
}

এখানে, @PathVariable অ্যানোটেশন ব্যবহার করা হয়েছে যা id নামক পাথ ভেরিয়েবলকে গ্রহণ করে। যদি রিকোয়েস্ট URL হয় /users/123, তাহলে userId হবে 123।

Path Variable এর URL উদাহরণ:

  • URL: /users/123
  • রেসপন্স: "User ID: 123"

একাধিক Path Variables:

আপনি একাধিক পাথ ভেরিয়েবলও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ব্যবহারকারী এবং তার অর্ডার আইডি পেতে চাইলে এমনভাবে লিখতে পারেন:

@GetMapping("/{userId}/orders/{orderId}")
public String getOrderDetails(@PathVariable("userId") Long userId, @PathVariable("orderId") Long orderId) {
    return "User ID: " + userId + ", Order ID: " + orderId;
}

এখানে, দুইটি পাথ ভেরিয়েবল userId এবং orderId একত্রে ব্যবহার করা হয়েছে।


Request Parameters

Request Parameters হল URL এর কোয়েরি স্ট্রিং এর অংশ হিসেবে ডেটা পাঠানো হয়। এগুলো সাধারণত ফর্ম ডেটা, সার্চ বা ফিল্টার কন্ডিশন এর জন্য ব্যবহৃত হয়। @RequestParam অ্যানোটেশন ব্যবহার করে এই প্যারামিটারগুলো গ্রহণ করা হয়।

Request Parameters এর উদাহরণ:

ধরা যাক, আপনি একটি API তৈরি করতে চান যেখানে ব্যবহারকারী একটি সার্চ টার্ম পাঠাবে এবং সার্ভার সেই অনুযায়ী ডেটা রিটার্ন করবে।

@RestController
@RequestMapping("/products")
public class ProductController {

    @GetMapping("/search")
    public String searchProducts(@RequestParam("name") String productName, @RequestParam("category") String category) {
        return "Searching for products with name: " + productName + " and category: " + category;
    }
}

এখানে, @RequestParam অ্যানোটেশন ব্যবহার করা হয়েছে যা কোয়েরি স্ট্রিং থেকে প্যারামিটারগুলো গ্রহণ করে। যেমন, /products/search?name=shoes&category=sport URL এর মাধ্যমে productName এবং category প্যারামিটার পাওয়া যাবে।

Request Parameter এর URL উদাহরণ:

  • URL: /products/search?name=shoes&category=sport
  • রেসপন্স: "Searching for products with name: shoes and category: sport"

Optional Request Parameters:

যদি কোনো প্যারামিটার ঐচ্ছিক (Optional) হতে চান, তবে আপনি defaultValue প্রপার্টি ব্যবহার করতে পারেন।

@GetMapping("/search")
public String searchProducts(@RequestParam(name = "name", defaultValue = "default") String productName) {
    return "Searching for products with name: " + productName;
}

এখানে, যদি name প্যারামিটার না দেওয়া হয়, তবে ডিফল্ট মান হিসেবে "default" ব্যবহার হবে।

Multiple Request Parameters:

একাধিক প্যারামিটারও একইভাবে গ্রহণ করা যেতে পারে। উদাহরণস্বরূপ, একটি সার্চ ফিচারে একাধিক ফিল্টার যুক্ত করা:

@GetMapping("/filter")
public String filterProducts(@RequestParam String name, @RequestParam int price) {
    return "Filtering products with name: " + name + " and price: " + price;
}

এখানে, name এবং price প্যারামিটার একসাথে ব্যবহার করা হয়েছে।


Path Variables vs Request Parameters

বৈশিষ্ট্যPath VariablesRequest Parameters
ব্যবহারসাধারণত আইডি বা রিসোর্সের নামের মতো ডেটা পাঠানোর জন্যফিল্টার, সার্চ বা ঐচ্ছিক ডেটা পাঠানোর জন্য
উদাহরণ/users/123/search?name=shoes&category=sport
ডেটার ধরনURL পাথের মধ্যে ডেটাকোয়েরি স্ট্রিংয়ের মধ্যে ডেটা
ঐচ্ছিকতাসাধারণত অপরিহার্য (Required)ঐচ্ছিক হতে পারে
প্রসেসিংরিসোর্সের নাম বা আইডি অনুযায়ী ডেটা প্রক্রিয়া করা হয়ফিল্টারিং বা অন্যান্য অপশন অনুযায়ী ডেটা প্রক্রিয়া

উপসংহার

স্প্রিং বুটের Path Variables এবং Request Parameters দুটি খুবই গুরুত্বপূর্ণ টেকনিক্যাল কনসেপ্ট। Path Variables সাধারণত RESTful API ডিজাইন বা রিসোর্স আইডেন্টিফিকেশন এর জন্য ব্যবহৃত হয়, যেখানে Request Parameters ফিল্টার, সার্চ বা ঐচ্ছিক ডেটা প্রেরণের জন্য ব্যবহৃত হয়। উভয় ক্ষেত্রেই স্প্রিং বুট খুব সহজভাবে এই ডেটাগুলি গ্রহণ এবং প্রক্রিয়া করার সুবিধা প্রদান করে।

Content added By

উদাহরণ সহ RESTful API তৈরি

107
107

স্প্রিং বুট (Spring Boot) দিয়ে RESTful API তৈরি করা খুবই সহজ এবং কার্যকর। REST (Representational State Transfer) একটি সফটওয়্যার আর্কিটেকচার স্টাইল যা HTTP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। স্প্রিং বুটের সাহায্যে RESTful API তৈরি করতে আমাদের প্রয়োজন কিছু সাধারণ কনসেপ্ট যেমন: @RestController, @RequestMapping, @GetMapping, @PostMapping ইত্যাদি।

এখানে আমরা একটি সাধারণ উদাহরণের মাধ্যমে স্প্রিং বুট ব্যবহার করে RESTful API তৈরির পুরো প্রক্রিয়া দেখব।


১. স্প্রিং বুট প্রকল্প তৈরি

প্রথমে একটি স্প্রিং বুট প্রকল্প তৈরি করতে হবে। আপনি স্প্রিং ইনিশিয়ালাইজার (Spring Initializr) ব্যবহার করে প্রকল্পটি তৈরি করতে পারেন, যা সহজেই ডিপেনডেন্সি চয়েস এবং অন্যান্য কনফিগারেশন করতে সহায়ক।

প্রকল্পটি তৈরি করার সময় নিচের ডিপেনডেন্সি গুলি নির্বাচন করুন:

  • Spring Web (RESTful API এর জন্য)
  • Spring Boot DevTools (ডেভেলপমেন্টে সুবিধার জন্য)
  • Lombok (অবজেক্ট ক্লাসের জন্য সহজ getter, setter ইত্যাদি)
  • Spring Data JPA (ডেটাবেস ইন্টিগ্রেশনের জন্য, যদি প্রয়োজন হয়)

২. RESTful API তৈরি করার উদাহরণ

ধরা যাক, আমাদের একটি ব্যবহারকারী (User) সম্পর্কিত API তৈরি করতে হবে। যেখানে ব্যবহারকারী সম্পর্কিত ডেটা রিট্রিভ (GET), যোগ (POST), আপডেট (PUT) এবং মুছে ফেলা (DELETE) হবে।

Step 1: মডেল ক্লাস তৈরি করা

প্রথমে আমাদের একটি User মডেল ক্লাস তৈরি করতে হবে, যা ব্যবহারকারীর তথ্য ধারণ করবে।

package com.example.demo.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    private Long id;
    private String name;
    private String email;
}

এখানে আমরা @Entity অ্যানোটেশন ব্যবহার করেছি, যা এটি একটি JPA Entity ক্লাস হিসেবে চিহ্নিত করবে এবং এটি ডেটাবেসে একটি টেবিল হিসেবে ম্যাপ হবে।


Step 2: রেপোজিটরি (Repository) তৈরি করা

এখন, User মডেল ক্লাসের জন্য একটি Repository তৈরি করতে হবে যা ডেটাবেস অপারেশনগুলি পরিচালনা করবে। আমরা JpaRepository ব্যবহার করব যা ডেটাবেসের জন্য প্রয়োজনীয় সকল ফাংশনালিটি প্রদান করবে।

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

Step 3: কন্ট্রোলার (Controller) তৈরি করা

এখন, আমাদের RESTful API কন্ট্রোলার তৈরি করতে হবে। এখানে আমরা @RestController অ্যানোটেশন ব্যবহার করব, যা এই ক্লাসটিকে REST API কন্ট্রোলার হিসেবে চিহ্নিত করবে। API এর বিভিন্ন HTTP রিকোয়েস্ট (GET, POST, PUT, DELETE) হ্যান্ডল করার জন্য বিভিন্ন মেথড তৈরি করব।

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    // GET: Retrieve all users
    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    // GET: Retrieve a user by ID
    @GetMapping("/{id}")
    public Optional<User> getUserById(@PathVariable Long id) {
        return userRepository.findById(id);
    }

    // POST: Create a new user
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    // PUT: Update an existing user
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userRepository.save(user);
    }

    // DELETE: Delete a user by ID
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}

এখানে আমরা বিভিন্ন HTTP মেথডের জন্য উপযুক্ত ম্যাপিং ব্যবহার করেছি:

  • @GetMapping: GET রিকোয়েস্টের জন্য
  • @PostMapping: POST রিকোয়েস্টের জন্য
  • @PutMapping: PUT রিকোয়েস্টের জন্য
  • @DeleteMapping: DELETE রিকোয়েস্টের জন্য

Step 4: অ্যাপ্লিকেশন চালু করা

এখন, আমাদের স্প্রিং বুট অ্যাপ্লিকেশনটি চালু করতে হবে। @SpringBootApplication অ্যানোটেশন ব্যবহার করে প্রধান অ্যাপ্লিকেশন ক্লাস তৈরি করা হয়।

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

৩. RESTful API এর টেস্টিং

আপনি Postman বা CURL ব্যবহার করে এই API গুলি টেস্ট করতে পারবেন।

GET Request:

এটি সকল ব্যবহারকারীর তালিকা ফেরত দেবে:

GET http://localhost:8080/api/users

GET Request (By ID):

এটি নির্দিষ্ট ব্যবহারকারী তথ্য ফেরত দেবে:

GET http://localhost:8080/api/users/{id}

POST Request:

এটি নতুন ব্যবহারকারী তৈরি করবে:

POST http://localhost:8080/api/users
Body: 
{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}

PUT Request:

এটি একটি ব্যবহারকারী তথ্য আপডেট করবে:

PUT http://localhost:8080/api/users/{id}
Body: 
{
    "name": "John Updated",
    "email": "johnupdated@example.com"
}

DELETE Request:

এটি একটি ব্যবহারকারী মুছে ফেলবে:

DELETE http://localhost:8080/api/users/{id}

উপসংহার

স্প্রিং বুট দিয়ে RESTful API তৈরি করা খুবই সহজ এবং দ্রুত। এটি ডেভেলপমেন্ট প্রক্রিয়াকে সহজ করে তোলে, বিশেষ করে যখন আমরা ডেটাবেসের সাথে সংযুক্ত কোনো অ্যাপ্লিকেশন তৈরি করতে চাই। এখানে আমরা একটি মৌলিক উদাহরণ দেখলাম যেখানে User মডেল, রেপোজিটরি এবং কন্ট্রোলার ব্যবহার করে একটি RESTful API তৈরি করা হয়েছে। এই API এর মাধ্যমে ডেটা রিট্রিভ, তৈরি, আপডেট এবং মুছে ফেলার কাজ করা সম্ভব।

Content added By
Promotion