Enterprise মধ্যম

Spring Framework 7-এর নেটিভ API ভার্সনিং সাপোর্ট ব্যবহার করে ডুপ্লিকেটেড ভার্সন-প্রিফিক্সড কন্ট্রোলার (version-prefixed controllers) প্রতিস্থাপন করুন।

✕ Spring Boot 2/3
// 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);
    }
}
✓ Spring Framework 7+
// 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 কল ব্যবহার করে হেডার থেকে ইউআরএল বা কোয়েরি-প্যারাম ভার্সনিংয়ে স্যুইচ করুন।

📈

ইনক্রিমেন্টাল ইভোলিউশন

সম্পর্কহীন এন্ডপয়েন্ট স্পর্শ না করে বা নতুন কন্ট্রোলার ফাইল তৈরি না করে একটি মেথডে একটি নতুন ভার্সন যোগ করুন।

পুরনো পদ্ধতি
ম্যানুয়াল ইউআরএল পাথ ভার্সনিং
আধুনিক পদ্ধতি
নেটিভ API ভার্সনিং
JDK থেকে
17
কঠিনতা
মধ্যম
Spring Framework 7 API ভার্সনিং (Versioning)
উপলব্ধ

Spring Framework 7.0 থেকে উপলব্ধ (Java 17+ প্রয়োজন)

Spring Framework 7 এর আগে, API ভার্সনিংয়ের জন্য প্রতি ভার্সনের জন্য আলাদা কন্ট্রোলার ক্লাস (যেমন /api/v1/products, /api/v2/products) প্রয়োজন হতো, যা রিকোয়েস্ট ম্যাপিংকে ডুপ্লিকেট করত এবং ভার্সনিং লজিককে বিভিন্ন ফাইলে ছড়িয়ে দিত। Spring Framework 7, @RequestMapping এবং সম্পর্কিত অ্যানোটেশনগুলোতে একটি নতুন ভার্সন অ্যাট্রিবিউট যোগ করে নেটিভ ভার্সনিং প্রবর্তন করেছে, সাথে WebMvcConfigurer-এ একটি configureApiVersioning হুকও রয়েছে। ভার্সনটি রিকোয়েস্ট হেডার, একটি ইউআরএল পাথ সেগমেন্ট, বা একটি কোয়েরি প্যারামিটার থেকে সমাধান করা যায় – সবই এক জায়গা থেকে নিয়ন্ত্রিত।