স্প্রিং বুটের কন্ট্রোলার (Controller) হলো একটি ক্লাস যা HTTP রিকোয়েস্টের জন্য হ্যান্ডলার হিসেবে কাজ করে। এটি মূলত ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করে এবং সেগুলোর জন্য উপযুক্ত রেসপন্স প্রদান করে। কন্ট্রোলারের মধ্যে মেথডগুলি @RequestMapping
অথবা এর বিভিন্ন এনোটেশন (যেমন @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
) ব্যবহার করে HTTP রিকোয়েস্টের ধরন অনুযায়ী পরিচালনা করা হয়।
স্প্রিং বুট কন্ট্রোলার সাধারণত REST API তৈরি করতে ব্যবহৃত হয়, যেখানে একাধিক HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে বিভিন্ন কার্যাবলী সম্পাদন করা হয়।
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 রিকোয়েস্টের জন্য মেথড ডিফাইন করা হয়েছে।
REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা HTTP প্রোটোকলের মাধ্যমে ডেটা স্থানান্তর করতে ব্যবহৃত হয়। স্প্রিং বুটের মাধ্যমে খুব সহজেই REST API তৈরি করা যায়। এটি ডেভেলপারদেরকে কাস্টম রিকোয়েস্ট হ্যান্ডলার তৈরি করার জন্য সহজ উপায় দেয় এবং নির্দিষ্ট রিকোয়েস্ট টাইপের জন্য মেথড ম্যানেজ করার সুবিধা প্রদান করে।
স্প্রিং বুট REST API তৈরি করতে হলে কিছু গুরুত্বপূর্ণ অ্যানোটেশন এবং কনফিগারেশন ব্যবহার করা হয়, যেমন @GetMapping
, @PostMapping
, @RequestParam
, @RequestBody
, ইত্যাদি। নিচে REST API তৈরি করার প্রক্রিয়া ব্যাখ্যা করা হলো।
ধরা যাক, আপনি একটি সিম্পল Employee
নামক অবজেক্ট দিয়ে REST API তৈরি করতে চান, যেখানে বিভিন্ন HTTP মেথড ব্যবহার করে CRUD অপারেশন করা হবে।
প্রথমে 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
অবজেক্টের জন্য একটি JpaRepository
রেপোজিটরি তৈরি করতে হবে, যা ডেটাবেসের সাথে কাজ করবে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
এখন 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);
}
}
এখন, 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 রিকোয়েস্ট করতে পারবেন:
/api/employees
– সমস্ত কর্মচারীর তথ্য পাবেন।/api/employees/{id}
– নির্দিষ্ট কর্মচারীর তথ্য পাবেন।/api/employees
– নতুন কর্মচারী তৈরি করবেন।/api/employees/{id}
– নির্দিষ্ট কর্মচারী মুছে ফেলবেন।স্প্রিং বুটের মাধ্যমে REST API তৈরি করা খুবই সহজ এবং দ্রুত হয়। @RestController
, @RequestMapping
, @GetMapping
, @PostMapping
ইত্যাদি অ্যানোটেশন ব্যবহার করে আপনি স্পষ্টভাবে HTTP রিকোয়েস্টের জন্য মেথড নির্ধারণ করতে পারবেন। ডেটাবেস ইন্টিগ্রেশন এবং CRUD অপারেশনও সহজে সম্পাদন করা সম্ভব। এর মাধ্যমে আপনি খুব দ্রুত কার্যকরী REST API তৈরি করতে পারবেন যা বাস্তব অ্যাপ্লিকেশনের জন্য অত্যন্ত উপযোগী।
Spring Boot একটি জনপ্রিয় ফ্রেমওয়ার্ক যা Java এ ওয়েব অ্যাপ্লিকেশন এবং RESTful সার্ভিস তৈরি করতে ব্যবহৃত হয়। Spring Boot এ API তৈরি করতে অনেক সহজ এবং স্বয়ংক্রিয় কনফিগারেশন থাকে। দুটি গুরুত্বপূর্ণ অ্যানোটেশন যা ওয়েব অ্যাপ্লিকেশন এবং RESTful সার্ভিসে ব্যবহৃত হয়, তা হলো @RestController
এবং @RequestMapping
। চলুন এগুলোর ব্যবহার এবং উদ্দেশ্য নিয়ে আলোচনা করি।
@RestController
অ্যানোটেশনটি Spring MVC (Model-View-Controller) এর অংশ এবং এটি একটি কনভিনিয়েন্ট ডিফাইনেশন যা @Controller এবং @ResponseBody অ্যানোটেশনগুলির সংমিশ্রণ। এর মাধ্যমে, Spring Boot অ্যাপ্লিকেশনকে RESTful ওয়েব সার্ভিস হিসেবে তৈরি করা হয়, যেখানে প্রতিটি রিকোয়েস্টের জন্য ডেটা JSON বা XML ফর্ম্যাটে রেসপন্স দেওয়া হয়। @RestController
অ্যানোটেশন ব্যবহারের ফলে, মেথডের রিটার্ন ভ্যালু স্বয়ংক্রিয়ভাবে HTTP রেসপন্সে পরিণত হয় এবং তা ক্লায়েন্টকে পাঠানো হয়।
@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
অ্যানোটেশনটি Spring MVC এর একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা HTTP রিকোয়েস্টের URL, HTTP মেথড এবং হ্যান্ডলিং মেথডকে ম্যাপ করে। @RequestMapping
অ্যানোটেশনটি মেথড লেভেলে বা ক্লাস লেভেলে ব্যবহার করা যেতে পারে। এটি একাধিক HTTP মেথড যেমন GET, POST, PUT, DELETE ইত্যাদি হ্যান্ডল করার জন্য ব্যবহার করা যেতে পারে।
@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) সহ রেসপন্স পাঠাবে।
@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 মেথডের সাথে ব্যবহৃত হতে পারে, তবে স্প্রিং বুটে কিছু বিশেষ অ্যানোটেশন রয়েছে যা নির্দিষ্ট HTTP মেথডের জন্য ব্যবহৃত হয়। যেমন:
উদাহরণস্বরূপ:
@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 রিকোয়েস্ট হ্যান্ডল করে।
@GetMapping
, @PostMapping
, @PutMapping
ইত্যাদি স্পেসিফিক মেথডগুলোর ব্যবহার বেশি হয়ে থাকে।Spring Boot এ @RestController
এবং @RequestMapping
হল দুটি অত্যন্ত গুরুত্বপূর্ণ অ্যানোটেশন যা RESTful API এবং ওয়েব অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়। @RestController
একটি কনভিনিয়েন্ট অ্যানোটেশন যা সার্ভিসের আউটপুটকে JSON বা XML এ রূপান্তরিত করে এবং @RequestMapping
URL, HTTP মেথড, এবং কন্ট্রোলারের মধ্যে সংযোগ তৈরি করে। নতুন স্প্রিং বুট সংস্করণে @GetMapping
, @PostMapping
, @PutMapping
ইত্যাদি অ্যানোটেশনগুলো ব্যবহারের মাধ্যমে কোড আরও পরিষ্কার এবং সহজ হতে পারে।
Spring Boot ব্যবহার করে ওয়েব অ্যাপ্লিকেশন ডেভেলপ করার সময়, HTTP methods (GET, POST, PUT, DELETE) গুরুত্বপূর্ণ ভূমিকা পালন করে। HTTP methods ওয়েব সার্ভিসের রিকোয়েস্ট এবং রেসপন্স পরিচালনা করার জন্য ব্যবহৃত হয়। এখানে আমরা স্প্রিং বুটে এই HTTP methods এর ব্যবহার নিয়ে বিস্তারিত আলোচনা করব।
HTTP (HyperText Transfer Protocol) বিভিন্ন ধরনের রিকোয়েস্ট তৈরি করতে সাহায্য করে, যার মাধ্যমে ক্লায়েন্ট (যেমন, ওয়েব ব্রাউজার) সার্ভারের সাথে যোগাযোগ করতে পারে। প্রধান HTTP methods গুলি হল:
Spring Boot এ, এগুলি মূলত RESTful API তৈরির জন্য ব্যবহৃত হয়।
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 ডেটা তৈরি বা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত ফর্ম সাবমিশন বা নতুন রিসোর্স তৈরি করার সময় এটি ব্যবহার করা হয়।
@RestController
@RequestMapping("/api")
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// এখানে নতুন ইউজার ডেটা তৈরি করা হবে
return userService.saveUser(user);
}
}
এখানে @RequestBody
ব্যবহার করা হয়েছে, যা ক্লায়েন্ট থেকে আসা JSON ডেটাকে User
অবজেক্টে কনভার্ট করে। এই POST
রিকোয়েস্ট নতুন ইউজার তৈরি করে।
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 ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। এটি সার্ভারে কোনো রিসোর্স মুছে ফেলার জন্য ব্যবহৃত হয়, যেমন ইউজার বা পণ্য ডিলিট করা।
@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 ডেভেলপমেন্ট খুবই সহজ এবং কার্যকরী হয়।
স্প্রিং বুট (Spring Boot) ওয়েব ডেভেলপমেন্টে সাধারণত Path Variables এবং Request Parameters ব্যবহৃত হয়। এগুলো HTTP রিকোয়েস্টের সাথে ইনপুট প্যারামিটার হিসেবে কাজ করে এবং সার্ভার সাইডে বিভিন্ন ডেটা প্রক্রিয়াকরণে সহায়তা করে।
Path Variables হল URL পাথের অংশ হিসেবে ডেটা পাঠানো। সাধারণত, RESTful API ডিজাইনে এটি ব্যবহৃত হয়, যেখানে URL পাথের মধ্যে ডায়নামিক ডেটা পাঠানো হয় এবং সেই ডেটা সার্ভার সাইডে প্রক্রিয়া করা হয়।
ধরা যাক, আপনি একটি 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।
/users/123
"User ID: 123"
আপনি একাধিক পাথ ভেরিয়েবলও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ব্যবহারকারী এবং তার অর্ডার আইডি পেতে চাইলে এমনভাবে লিখতে পারেন:
@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 হল URL এর কোয়েরি স্ট্রিং এর অংশ হিসেবে ডেটা পাঠানো হয়। এগুলো সাধারণত ফর্ম ডেটা, সার্চ বা ফিল্টার কন্ডিশন এর জন্য ব্যবহৃত হয়। @RequestParam
অ্যানোটেশন ব্যবহার করে এই প্যারামিটারগুলো গ্রহণ করা হয়।
ধরা যাক, আপনি একটি 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
প্যারামিটার পাওয়া যাবে।
/products/search?name=shoes&category=sport
"Searching for products with name: shoes and category: sport"
যদি কোনো প্যারামিটার ঐচ্ছিক (Optional) হতে চান, তবে আপনি defaultValue
প্রপার্টি ব্যবহার করতে পারেন।
@GetMapping("/search")
public String searchProducts(@RequestParam(name = "name", defaultValue = "default") String productName) {
return "Searching for products with name: " + productName;
}
এখানে, যদি name
প্যারামিটার না দেওয়া হয়, তবে ডিফল্ট মান হিসেবে "default"
ব্যবহার হবে।
একাধিক প্যারামিটারও একইভাবে গ্রহণ করা যেতে পারে। উদাহরণস্বরূপ, একটি সার্চ ফিচারে একাধিক ফিল্টার যুক্ত করা:
@GetMapping("/filter")
public String filterProducts(@RequestParam String name, @RequestParam int price) {
return "Filtering products with name: " + name + " and price: " + price;
}
এখানে, name
এবং price
প্যারামিটার একসাথে ব্যবহার করা হয়েছে।
বৈশিষ্ট্য | Path Variables | Request Parameters |
---|---|---|
ব্যবহার | সাধারণত আইডি বা রিসোর্সের নামের মতো ডেটা পাঠানোর জন্য | ফিল্টার, সার্চ বা ঐচ্ছিক ডেটা পাঠানোর জন্য |
উদাহরণ | /users/123 | /search?name=shoes&category=sport |
ডেটার ধরন | URL পাথের মধ্যে ডেটা | কোয়েরি স্ট্রিংয়ের মধ্যে ডেটা |
ঐচ্ছিকতা | সাধারণত অপরিহার্য (Required) | ঐচ্ছিক হতে পারে |
প্রসেসিং | রিসোর্সের নাম বা আইডি অনুযায়ী ডেটা প্রক্রিয়া করা হয় | ফিল্টারিং বা অন্যান্য অপশন অনুযায়ী ডেটা প্রক্রিয়া |
স্প্রিং বুটের Path Variables এবং Request Parameters দুটি খুবই গুরুত্বপূর্ণ টেকনিক্যাল কনসেপ্ট। Path Variables সাধারণত RESTful API ডিজাইন বা রিসোর্স আইডেন্টিফিকেশন এর জন্য ব্যবহৃত হয়, যেখানে Request Parameters ফিল্টার, সার্চ বা ঐচ্ছিক ডেটা প্রেরণের জন্য ব্যবহৃত হয়। উভয় ক্ষেত্রেই স্প্রিং বুট খুব সহজভাবে এই ডেটাগুলি গ্রহণ এবং প্রক্রিয়া করার সুবিধা প্রদান করে।
স্প্রিং বুট (Spring Boot) দিয়ে RESTful API তৈরি করা খুবই সহজ এবং কার্যকর। REST (Representational State Transfer) একটি সফটওয়্যার আর্কিটেকচার স্টাইল যা HTTP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। স্প্রিং বুটের সাহায্যে RESTful API তৈরি করতে আমাদের প্রয়োজন কিছু সাধারণ কনসেপ্ট যেমন: @RestController
, @RequestMapping
, @GetMapping
, @PostMapping
ইত্যাদি।
এখানে আমরা একটি সাধারণ উদাহরণের মাধ্যমে স্প্রিং বুট ব্যবহার করে RESTful API তৈরির পুরো প্রক্রিয়া দেখব।
প্রথমে একটি স্প্রিং বুট প্রকল্প তৈরি করতে হবে। আপনি স্প্রিং ইনিশিয়ালাইজার (Spring Initializr) ব্যবহার করে প্রকল্পটি তৈরি করতে পারেন, যা সহজেই ডিপেনডেন্সি চয়েস এবং অন্যান্য কনফিগারেশন করতে সহায়ক।
প্রকল্পটি তৈরি করার সময় নিচের ডিপেনডেন্সি গুলি নির্বাচন করুন:
ধরা যাক, আমাদের একটি ব্যবহারকারী (User) সম্পর্কিত API তৈরি করতে হবে। যেখানে ব্যবহারকারী সম্পর্কিত ডেটা রিট্রিভ (GET), যোগ (POST), আপডেট (PUT) এবং মুছে ফেলা (DELETE) হবে।
প্রথমে আমাদের একটি 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 ক্লাস হিসেবে চিহ্নিত করবে এবং এটি ডেটাবেসে একটি টেবিল হিসেবে ম্যাপ হবে।
এখন, 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> {
}
এখন, আমাদের 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 রিকোয়েস্টের জন্যএখন, আমাদের স্প্রিং বুট অ্যাপ্লিকেশনটি চালু করতে হবে। @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);
}
}
আপনি Postman বা CURL ব্যবহার করে এই API গুলি টেস্ট করতে পারবেন।
এটি সকল ব্যবহারকারীর তালিকা ফেরত দেবে:
GET http://localhost:8080/api/users
এটি নির্দিষ্ট ব্যবহারকারী তথ্য ফেরত দেবে:
GET http://localhost:8080/api/users/{id}
এটি নতুন ব্যবহারকারী তৈরি করবে:
POST http://localhost:8080/api/users
Body:
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
এটি একটি ব্যবহারকারী তথ্য আপডেট করবে:
PUT http://localhost:8080/api/users/{id}
Body:
{
"name": "John Updated",
"email": "johnupdated@example.com"
}
এটি একটি ব্যবহারকারী মুছে ফেলবে:
DELETE http://localhost:8080/api/users/{id}
স্প্রিং বুট দিয়ে RESTful API তৈরি করা খুবই সহজ এবং দ্রুত। এটি ডেভেলপমেন্ট প্রক্রিয়াকে সহজ করে তোলে, বিশেষ করে যখন আমরা ডেটাবেসের সাথে সংযুক্ত কোনো অ্যাপ্লিকেশন তৈরি করতে চাই। এখানে আমরা একটি মৌলিক উদাহরণ দেখলাম যেখানে User
মডেল, রেপোজিটরি এবং কন্ট্রোলার ব্যবহার করে একটি RESTful API তৈরি করা হয়েছে। এই API এর মাধ্যমে ডেটা রিট্রিভ, তৈরি, আপডেট এবং মুছে ফেলার কাজ করা সম্ভব।
Read more