RESTful Web Services হল এমন একটি সেবা (service) যা HTTP প্রটোকল এবং তার মেথডগুলি (GET, POST, PUT, DELETE) ব্যবহার করে বিভিন্ন রিসোর্সের সাথে কাজ করে। Spring MVC ফ্রেমওয়ার্ক RESTful সেবা তৈরির জন্য খুবই শক্তিশালী এবং জনপ্রিয় একটি টুল। স্প্রিং এমভিসি সহজেই @RestController এবং @RequestMapping অ্যানোটেশনগুলি ব্যবহার করে RESTful API তৈরি করতে সহায়তা করে।
এই উদাহরণে আমরা একটি সাধারণ RESTful API তৈরি করব, যা কিছু কন্ট্রোলার মেথডের মাধ্যমে GET, POST, PUT, এবং DELETE HTTP রিকোয়েস্ট প্রক্রিয়া করবে।
১. স্প্রিং এমভিসি RESTful API কনফিগারেশন
স্প্রিং এমভিসি RESTful API তৈরি করার জন্য প্রথমে স্প্রিং কনফিগারেশন সেটআপ করতে হবে। সাধারণত @EnableWebMvc এবং @ComponentScan ব্যবহার করা হয়।
WebConfig.java:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
// You can add custom configurations here if needed
}
এখানে @EnableWebMvc স্প্রিং এমভিসি কনফিগারেশন সক্রিয় করে এবং @ComponentScan মাধ্যমে কন্ট্রোলার ক্লাসগুলো স্ক্যান করে।
২. RESTful API কন্ট্রোলার তৈরি
এখন আমরা একটি RESTful API কন্ট্রোলার তৈরি করব, যা HTTP রিকোয়েস্টের জন্য বিভিন্ন মেথড প্রক্রিয়া করবে।
UserController.java:
@RestController
@RequestMapping("/api/users")
public class UserController {
private List<User> userList = new ArrayList<>();
// Constructor to initialize some users
public UserController() {
userList.add(new User(1, "John Doe", "john@example.com"));
userList.add(new User(2, "Jane Smith", "jane@example.com"));
}
// GET: Retrieve all users
@GetMapping("/")
public List<User> getAllUsers() {
return userList;
}
// GET: Retrieve a specific user by ID
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
for (User user : userList) {
if (user.getId() == id) {
return ResponseEntity.ok(user); // Return status 200 OK with user data
}
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); // Return 404 if not found
}
// POST: Create a new user
@PostMapping("/")
public ResponseEntity<User> createUser(@RequestBody User user) {
user.setId(userList.size() + 1);
userList.add(user);
return ResponseEntity.status(HttpStatus.CREATED).body(user); // Return status 201 Created
}
// PUT: Update a user by ID
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User user) {
for (User existingUser : userList) {
if (existingUser.getId() == id) {
existingUser.setName(user.getName());
existingUser.setEmail(user.getEmail());
return ResponseEntity.ok(existingUser); // Return updated user with status 200 OK
}
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); // Return 404 if user not found
}
// DELETE: Delete a user by ID
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable int id) {
Iterator<User> iterator = userList.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (user.getId() == id) {
iterator.remove(); // Remove the user from the list
return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); // Return 204 No Content
}
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); // Return 404 if user not found
}
}
কন্ট্রোলার ব্যাখ্যা:
@RestController: এই অ্যানোটেশনটি স্প্রিংকে নির্দেশ করে যে এটি একটি RESTful কন্ট্রোলার ক্লাস এবং@ResponseBodyঅ্যানোটেশনের মতো প্রতিটি রিটার্ন ভ্যালুকে সরাসরি HTTP রেসপন্সে পাঠাবে।@RequestMapping("/api/users"): এই অ্যানোটেশনটি API রুট নির্ধারণ করে (এখানে/api/usersURL পাথ)।@GetMapping("/"): GET HTTP রিকোয়েস্টের জন্য ব্যবহার করা হয়। এটি সমস্ত ইউজারের তালিকা রিটার্ন করে।@GetMapping("/{id}"): একটি নির্দিষ্ট User আইডি অনুসারে ইউজারের ডাটা রিটার্ন করে।@PostMapping("/"): POST HTTP রিকোয়েস্টের মাধ্যমে একটি নতুন ইউজার তৈরি করা হয়।@PutMapping("/{id}"): PUT HTTP রিকোয়েস্টের মাধ্যমে একটি নির্দিষ্ট ইউজারের ডাটা আপডেট করা হয়।@DeleteMapping("/{id}"): DELETE HTTP রিকোয়েস্টের মাধ্যমে একটি ইউজার ডিলিট করা হয়।
User.java:
এখানে একটি সাধারণ User ক্লাস তৈরি করা হলো যা আমাদের ডাটা রিপ্রেজেন্ট করবে।
public class User {
private int id;
private String name;
private String email;
// Constructors, Getters, Setters
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
৩. Application Configuration (Main Class)
স্প্রিং বুট অ্যাপ্লিকেশন শুরু করার জন্য একটি মূল ক্লাস তৈরি করতে হবে। এটি @SpringBootApplication অ্যানোটেশন দিয়ে চিহ্নিত করা হবে।
@SpringBootApplication
public class SpringMvcRestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringMvcRestApplication.class, args);
}
}
৪. API Test:
এখন, আমরা আমাদের RESTful API-টি Postman বা অন্য কোনো HTTP ক্লায়েন্ট ব্যবহার করে পরীক্ষা করতে পারি।
- GET /api/users/: সমস্ত ইউজারের তালিকা দেখতে।
- GET /api/users/{id}: নির্দিষ্ট ইউজার (যেমন,
GET /api/users/1) দেখতে। - POST /api/users/: নতুন ইউজার তৈরি করতে:
- Request Body:
{"name": "Alex", "email": "alex@example.com"}
- Request Body:
- PUT /api/users/{id}: ইউজারের তথ্য আপডেট করতে:
- Request Body:
{"name": "Alex Updated", "email": "alex.updated@example.com"}
- Request Body:
- DELETE /api/users/{id}: ইউজার মুছে ফেলতে (যেমন,
DELETE /api/users/1)
উপসংহার:
- Spring MVC ফ্রেমওয়ার্ক RESTful ওয়েব সার্ভিস তৈরি করার জন্য অত্যন্ত শক্তিশালী এবং সহজ উপায় প্রদান করে।
@RestController,@RequestMapping,@GetMapping,@PostMapping,@PutMapping, এবং@DeleteMappingএর মতো অ্যানোটেশনগুলি RESTful API তৈরি করতে সাহায্য করে।- এই উদাহরণে আমরা দেখেছি কিভাবে বিভিন্ন HTTP মেথড ব্যবহার করে CRUD অপারেশন (Create, Read, Update, Delete) সম্পন্ন করা যায়।
Read more