RestTemplate এবং WebClient ব্যবহার করে API Integration

Spring Batch এবং Rest API Integration - স্প্রিং ব্যাচ (Spring Batch) - Java Technologies

322

Spring Batch ব্যাচ প্রক্রিয়াকরণ এবং ডেটা ম্যানিপুলেশন জন্য ব্যবহৃত হয়, কিন্তু কখনো কখনো আপনাকে বাহ্যিক সিস্টেম বা API এর সাথে যোগাযোগ করতে হতে পারে, যেমন REST API-এর মাধ্যমে ডেটা রিড বা রাইট করা। RestTemplate এবং WebClient হল Spring Framework-এর দুটি গুরুত্বপূর্ণ ক্লাস যা API-এর সাথে যোগাযোগের জন্য ব্যবহৃত হয়। এই দুটি টুল ব্যবহার করে আপনি Spring Batch এর মধ্যে বাহ্যিক API এর সাথে ইন্টিগ্রেশন করতে পারেন।

এখানে RestTemplate এবং WebClient ব্যবহার করে API ইন্টিগ্রেশন করার জন্য উদাহরণ দেওয়া হয়েছে।


RestTemplate ব্যবহার করে API Integration

RestTemplate একটি সিনক্রোনাস HTTP ক্লায়েন্ট যা HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়। যদিও এটি এখন WebClient এর মাধ্যমে প্রতিস্থাপিত হচ্ছে, তবুও এটি অনেক অ্যাপ্লিকেশনেই ব্যবহৃত হচ্ছে এবং Spring Batch এর মধ্যে API ইন্টিগ্রেশনের জন্য ব্যবহার করা যেতে পারে।

1. RestTemplate Bean কনফিগারেশন

প্রথমে Spring Batch প্রজেক্টে RestTemplate Bean কনফিগার করতে হবে। Spring Boot এর কনফিগারেশন ক্লাসে নিচের মতো Bean কনফিগার করতে হবে:

@Configuration
public class BatchConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

2. API কল করার জন্য ItemReader তৈরি করা

এখন, ItemReader ব্যবহার করে API থেকে ডেটা রিড করার জন্য RestTemplate ব্যবহার করা যেতে পারে। নিচে একটি উদাহরণ দেখানো হলো যেখানে একটি API থেকে JSON ডেটা রিড করা হচ্ছে:

@Component
public class ApiItemReader implements ItemReader<MyItem> {

    private final RestTemplate restTemplate;
    private String apiUrl = "https://api.example.com/items";  // API URL

    @Autowired
    public ApiItemReader(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @Override
    public MyItem read() throws Exception {
        ResponseEntity<MyItem> response = restTemplate.exchange(
            apiUrl,
            HttpMethod.GET,
            null,
            MyItem.class
        );
        
        return response.getBody(); // API থেকে প্রাপ্ত ডেটা
    }
}

এখানে, RestTemplate ব্যবহার করে একটি HTTP GET রিকোয়েস্ট পাঠানো হচ্ছে এবং API থেকে প্রাপ্ত ডেটা MyItem ক্লাসে ম্যাপ করা হচ্ছে।

3. Spring Batch Step কনফিগারেশন

এখন এই ItemReader-কে Spring Batch-এ একটি Step এর মধ্যে ব্যবহার করতে হবে:

@Bean
public Step step1(ApiItemReader reader, ItemProcessor<MyItem, MyProcessedItem> processor, ItemWriter<MyProcessedItem> writer) {
    return stepBuilderFactory.get("step1")
            .<MyItem, MyProcessedItem>chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
}

এখানে ApiItemReader কে reader হিসাবে ব্যবহার করা হয়েছে, যেটি API থেকে ডেটা রিড করবে এবং পরবর্তী প্রসেসিংয়ের জন্য তা পাঠাবে।


WebClient ব্যবহার করে API Integration

WebClient হল Spring 5 এর একটি নতুন ও আধুনিক HTTP ক্লায়েন্ট যা asynchronous এবং reactive প্রোগ্রামিং সাপোর্ট করে। এটি RestTemplate থেকে উন্নত এবং ফিচার সমৃদ্ধ। WebClient ব্যবহার করে API ইন্টিগ্রেশন আরও কার্যকরী হতে পারে, বিশেষত যখন আপনি asynchronous বা non-blocking রিকোয়েস্ট চান।

1. WebClient Bean কনফিগারেশন

Spring Boot-এ WebClient Bean কনফিগার করতে নিচের কনফিগারেশন ব্যবহার করা যেতে পারে:

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

2. API কল করার জন্য ItemReader তৈরি করা

WebClient ব্যবহার করে API থেকে ডেটা রিড করতে একটি ItemReader তৈরি করা হবে। এখানে, asynchronous API কল ব্যবহার করা হচ্ছে:

@Component
public class ApiItemReader implements ItemReader<MyItem> {

    private final WebClient.Builder webClientBuilder;
    private String apiUrl = "https://api.example.com/items";  // API URL

    @Autowired
    public ApiItemReader(WebClient.Builder webClientBuilder) {
        this.webClientBuilder = webClientBuilder;
    }

    @Override
    public MyItem read() throws Exception {
        WebClient webClient = webClientBuilder.baseUrl(apiUrl).build();
        
        // WebClient ব্যবহার করে API কল
        MyItem item = webClient.get()
                .retrieve()
                .bodyToMono(MyItem.class) // API থেকে ডেটা JSON হিসেবে রিড
                .block(); // synchronous হিসেবে ব্লক করতে
        return item;
    }
}

এখানে, WebClient ব্যবহার করে API কল করা হচ্ছে এবং প্রাপ্ত ডেটা MyItem ক্লাসে ম্যাপ করা হচ্ছে। bodyToMono() একটি reactive ফাংশন যা asynchronous ডেটা রিটার্ন করে, কিন্তু .block() ব্যবহার করে সিঙ্ক্রোনাস আউটপুট পাওয়া যাচ্ছে।

3. Spring Batch Step কনফিগারেশন

এখন WebClient এর মাধ্যমে রিড করা ডেটা Spring Batch Step এর মধ্যে ব্যবহার করা হবে:

@Bean
public Step step1(ApiItemReader reader, ItemProcessor<MyItem, MyProcessedItem> processor, ItemWriter<MyProcessedItem> writer) {
    return stepBuilderFactory.get("step1")
            .<MyItem, MyProcessedItem>chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
}

এখানে ApiItemReader কে reader হিসাবে ব্যবহার করা হচ্ছে, যেটি API থেকে ডেটা রিড করবে এবং পরবর্তী প্রসেসিংয়ের জন্য তা পাঠাবে।


কোন সময় RestTemplate এবং WebClient ব্যবহার করবেন?

  • RestTemplate:
    • সিঙ্ক্রোনাস (synchronous) HTTP রিকোয়েস্টে ভালো কাজ করে।
    • ছোট অ্যাপ্লিকেশন বা যেখানে asynchronous ডেটা প্রক্রিয়া প্রয়োজন না।
    • Spring 4 এবং Spring 5 পর্যন্ত ব্যবহৃত হয়ে আসছে, তবে বর্তমানে Spring 5 থেকে WebClient এর সুপারিশ করা হচ্ছে।
  • WebClient:
    • Asynchronous এবং non-blocking রিকোয়েস্ট সাপোর্ট করে, যা আরও কার্যকরী এবং স্কেলেবল।
    • Reactive অ্যাপ্লিকেশন এবং যেখানে নেটওয়ার্ক কলের জন্য ব্যাকগ্রাউন্ড থ্রেডের উপর নির্ভর করতে হয়।
    • Spring 5 এবং পরবর্তী ভার্সনগুলোতে WebClient এর ব্যবহার বেশি সুপারিশ করা হচ্ছে।

সারাংশ

Spring Batch ব্যবহার করে RestTemplate এবং WebClient এর মাধ্যমে API ইন্টিগ্রেশন করা সম্ভব এবং এটি ব্যাচ প্রসেসিংয়ের মধ্যে বাহ্যিক সিস্টেমের সাথে ডেটা আদান-প্রদান করতে ব্যবহৃত হতে পারে। RestTemplate একটি সিঙ্ক্রোনাস HTTP ক্লায়েন্ট, যা সহজ API ইন্টিগ্রেশন করতে সাহায্য করে, এবং WebClient হল একটি আধুনিক এবং রিএ্যাকটিভ HTTP ক্লায়েন্ট যা asynchronous এবং non-blocking রিকোয়েস্ট সাপোর্ট করে। Spring Batch এবং Spring WebClient বা RestTemplate এর মাধ্যমে আপনি আরও স্কেলেবল, পারফরম্যান্ট, এবং কার্যকরী API ইন্টিগ্রেশন করতে সক্ষম হবেন।

Content added By
Promotion

Are you sure to start over?

Loading...