Spring Framework 7 API ভার্সনিং (Versioning)
Spring Framework 7-এর নেটিভ API ভার্সনিং সাপোর্ট ব্যবহার করে ডুপ্লিকেটেড ভার্সন-প্রিফিক্সড কন্ট্রোলার (version-prefixed controllers) প্রতিস্থাপন করুন।
// Version 1 controller
@RestController
@RequestMapping("/api/v1/products")
public class ProductControllerV1 {
@GetMapping("/{id}")
public ProductDtoV1 getProduct(
@PathVariable Long id) {
return service.getV1(id);
}
}
// Version 2 — duplicated structure
@RestController
@RequestMapping("/api/v2/products")
public class ProductControllerV2 {
@GetMapping("/{id}")
public ProductDtoV2 getProduct(
@PathVariable Long id) {
return service.getV2(id);
}
}
// Configure versioning once
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureApiVersioning(
ApiVersionConfigurer config) {
config.useRequestHeader("X-API-Version");
}
}
// Single controller, version per method
@RestController
@RequestMapping("/api/products")
public class ProductController {
@GetMapping(value = "/{id}", version = "1")
public ProductDtoV1 getV1(@PathVariable Long id) {
return service.getV1(id);
}
@GetMapping(value = "/{id}", version = "2")
public ProductDtoV2 getV2(@PathVariable Long id) {
return service.getV2(id);
}
}
কন্ট্রোলার ডুপ্লিকেশন নেই
সব ভার্সন একটি কন্ট্রোলার ক্লাসেই থাকে; শুধুমাত্র ইন্ডিভিজুয়াল হ্যান্ডলার মেথডগুলো একটি ভার্সন অ্যাট্রিবিউট বহন করে।
সেন্ট্রালাইজড ভার্সন স্ট্র্যাটেজি
একটি সিঙ্গেল configureApiVersioning কল ব্যবহার করে হেডার থেকে ইউআরএল বা কোয়েরি-প্যারাম ভার্সনিংয়ে স্যুইচ করুন।
ইনক্রিমেন্টাল ইভোলিউশন
সম্পর্কহীন এন্ডপয়েন্ট স্পর্শ না করে বা নতুন কন্ট্রোলার ফাইল তৈরি না করে একটি মেথডে একটি নতুন ভার্সন যোগ করুন।
Spring Framework 7.0 থেকে উপলব্ধ (Java 17+ প্রয়োজন)
Spring Framework 7 এর আগে, API ভার্সনিংয়ের জন্য প্রতি ভার্সনের জন্য আলাদা কন্ট্রোলার ক্লাস (যেমন /api/v1/products, /api/v2/products) প্রয়োজন হতো, যা রিকোয়েস্ট ম্যাপিংকে ডুপ্লিকেট করত এবং ভার্সনিং লজিককে বিভিন্ন ফাইলে ছড়িয়ে দিত। Spring Framework 7, @RequestMapping এবং সম্পর্কিত অ্যানোটেশনগুলোতে একটি নতুন ভার্সন অ্যাট্রিবিউট যোগ করে নেটিভ ভার্সনিং প্রবর্তন করেছে, সাথে WebMvcConfigurer-এ একটি configureApiVersioning হুকও রয়েছে। ভার্সনটি রিকোয়েস্ট হেডার, একটি ইউআরএল পাথ সেগমেন্ট, বা একটি কোয়েরি প্যারামিটার থেকে সমাধান করা যায় – সবই এক জায়গা থেকে নিয়ন্ত্রিত।