Spring Boot হলো Spring Framework এর উপর ভিত্তি করে তৈরি একটি production-ready framework, যা দিয়ে খুব সহজে ওয়েব অ্যাপ্লিকেশন ও RESTful API তৈরি করা যায়। এই টিউটোরিয়ালে আমরা শিখব কীভাবে Spring MVC আর্কিটেকচার ব্যবহার করে REST API ডেভেলপ করা যায়।


Spring MVC কী?

Spring MVC (Model-View-Controller) হলো একটি ওয়েব ফ্রেমওয়ার্ক যা অ্যাপ্লিকেশনকে তিনটি প্রধান অংশে ভাগ করে:

Layer দায়িত্ব
Model ডেটা ও বিজনেস  লজিক হ্যান্ডল করে
View UI বা Presentation দেখায়
Controller Request ও Response সমন্বয় করে

REST API তৈরিতে আমরা সাধারণত View অংশ ব্যবহার করি না, কারণ এখানে JSON বা XML response ফেরত দেওয়া হয়।


Spring Boot প্রজেক্ট তৈরি

👉 তুমি Spring Initializr থেকে একটি নতুন প্রজেক্ট তৈরি করতে পারো:
🔗 https://start.spring.io

Dependencies:

- Spring Web

- Spring Boot DevTools

- Spring Data JPA (optional)

- H2 বা MySQL Database (optional)


Controller তৈরি করা

চলো একটি সাধারণ REST Controller তৈরি করি 👇

@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;

public UserController(UserService userService) {
    this.userService = userService;
}

@GetMapping
public List<User> getAllUsers() {
    return userService.getAllUsers();
}

@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.getUserById(id);
}

@PostMapping
public User createUser(@RequestBody User user) {
    return userService.saveUser(user);
}

@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
    return userService.updateUser(id, user);
}

@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
}

}

এখানে প্রতিটি HTTP মেথড (GET, POST, PUT, DELETE) Spring এর Annotation দিয়ে ম্যাপ করা হয়েছে।


Service Layer

@Service
public class UserService {
private final UserRepository userRepository;

public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
}

public List<User> getAllUsers() {
    return userRepository.findAll();
}

public User getUserById(Long id) {
    return userRepository.findById(id)
            .orElseThrow(() -> new RuntimeException("User not found"));
}

public User saveUser(User user) {
    return userRepository.save(user);
}

public User updateUser(Long id, User user) {
    User existing = getUserById(id);
    existing.setName(user.getName());
    existing.setEmail(user.getEmail());
    return userRepository.save(existing);
}

public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

}


Repository Layer

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


Entity Class

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private String email;

// Getter &amp; Setter

}


REST API Endpoint গুলো

HTTP Method Endpoint বর্ণনা
GET /api/users সব ইউজার লিস্ট করে
GET /api/users/{id} নির্দিষ্ট ইউজার ডিটেইল
POST /api/users নতুন ইউজার তৈরি
PUT /api/users/{id} ইউজার আপডেট
DELETE /api/users/{id} ইউজার ডিলিট


JSON Request উদাহরণ

POST /api/users

{
  "name": "Maruf Hasan",
  "email": "maruf@example.com"
}


Response:

{
  "id": 1,
  "name": "Maruf Hasan",
  "email": "maruf@example.com"
}


Exception Handling যোগ করা

API তে সুন্দর error response দিতে @ControllerAdvice ব্যবহার করা যায় 👇

@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity&lt;Map&lt;String, String&gt;&gt; handleRuntimeException(RuntimeException ex) {
    Map&lt;String, String&gt; error = new HashMap&lt;&gt;();
    error.put("message", ex.getMessage());
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
}

}


Validation যোগ করা

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank(message = "Name cannot be blank")
private String name;

@Email(message = "Email must be valid")
private String email;

}

এবং Controller এ @Valid ব্যবহার করো

@PostMapping
public User createUser(@Valid @RequestBody User user) {
    return userService.saveUser(user);
}


API টেস্ট করা

তুমি Postman বা cURL দিয়ে API টেস্ট করতে পারো।

curl -X GET http://localhost:8080/api/users


Advanced Topic: Versioning API

একাধিক ভার্সন রাখতে পারো header বা path ভিত্তিকভাবে 👇

@RestController
@RequestMapping("/api/v1/users")
public class UserControllerV1 { ... }
@RestController
@RequestMapping("/api/v2/users")
public class UserControllerV2 { ... }


Best Practices

- Controller-এ শুধুমাত্র HTTP হ্যান্ডলিং রাখো
- Service-এ Business Logic রাখো
- Repository-তে শুধুমাত্র Database Operations রাখো
- Proper Exception Handling করো
- Logging & Monitoring ব্যবহার করো (Spring Boot Actuator সহ)
- Validation সবসময় যোগ করো
- DTO ব্যবহার করে Response ক্লিন রাখো


Share