নিচে স্প্রিং বুট ক্লায়েন্টে (Spring Boot Client) WebClient ব্যবহার করে একটি উদাহরণ দেখানো হয়েছে। WebClient আধুনিক পদ্ধতি যা স্প্রিং বুট ২.০ থেকে পরিচিত এবং এটি non-blocking এবং reactive প্রোগ্রামিং সমর্থন করে।
১. প্রজেক্ট তৈরি করুন
Spring Initializr-এ যান এবং Spring Boot Starter WebFlux ডিপেনডেন্সি যুক্ত করে একটি নতুন প্রজেক্ট তৈরি করুন।
২. pom.xml ডিপেনডেন্সি যুক্ত করুন
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
৩. WebClient কনফিগারেশন তৈরি করুন
WebClient Bean কনফিগারেশন:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
৪. WebClient ব্যবহার করে API ক্লায়েন্ট তৈরি করুন
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class ApiClient {
private final WebClient webClient;
public ApiClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
}
// GET রিকোয়েস্ট
public Mono<String> getData(String endpoint) {
return webClient.get()
.uri(endpoint)
.retrieve()
.bodyToMono(String.class);
}
// POST রিকোয়েস্ট
public Mono<String> postData(String endpoint, Object requestBody) {
return webClient.post()
.uri(endpoint)
.bodyValue(requestBody)
.retrieve()
.bodyToMono(String.class);
}
}
৫. Controller ক্লাসে WebClient ব্যবহার করুন
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class ClientController {
private final ApiClient apiClient;
public ClientController(ApiClient apiClient) {
this.apiClient = apiClient;
}
// GET রিকোয়েস্ট
@GetMapping("/fetch-data")
public Mono<String> fetchData() {
String endpoint = "/posts/1"; // উদাহরণ API Endpoint
return apiClient.getData(endpoint);
}
// POST রিকোয়েস্ট
@PostMapping("/send-data")
public Mono<String> sendData(@RequestBody Object requestBody) {
String endpoint = "/posts"; // উদাহরণ API Endpoint
return apiClient.postData(endpoint, requestBody);
}
}
৬. GET এবং POST রিকোয়েস্ট টেস্ট করুন
GET রিকোয়েস্ট টেস্ট:
- API Endpoint:
http://localhost:8080/fetch-data - এটি
https://jsonplaceholder.typicode.com/posts/1থেকে ডেটা রিট্রিভ করবে।
POST রিকোয়েস্ট টেস্ট:
- API Endpoint:
http://localhost:8080/send-data Request Body (JSON):
{ "title": "foo", "body": "bar", "userId": 1 }- এটি
https://jsonplaceholder.typicode.com/postsAPI-তে POST করবে এবং রেসপন্স ফিরিয়ে দেবে।
৭. Reactive এবং Non-blocking আচরণ
WebClient এর reactive nature এর কারণে, এটি Mono বা Flux টাইপের ডেটা রিটার্ন করে, যা asynchronous ডেটা প্রসেস করতে ব্যবহার করা হয়। এটি ব্লকিং ছাড়াই API থেকে ডেটা রিট্রিভ করতে পারে।
৮. Error Handling যুক্ত করুন
WebClient এ Error Handling:
public Mono<String> getData(String endpoint) {
return webClient.get()
.uri(endpoint)
.retrieve()
.onStatus(
status -> status.is4xxClientError() || status.is5xxServerError(),
clientResponse -> Mono.error(new RuntimeException("Error: " + clientResponse.statusCode()))
)
.bodyToMono(String.class)
.onErrorResume(e -> Mono.just("Fallback Response: " + e.getMessage()));
}
৯. উদাহরণ রেসপন্স
GET রেসপন্স:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
POST রেসপন্স:
{
"id": 101,
"title": "foo",
"body": "bar",
"userId": 1
}
WebClient এর সুবিধা:
- Non-blocking এবং Asynchronous: একাধিক রিকোয়েস্ট প্যারালালে প্রক্রিয়া করতে সক্ষম।
- Reactive Support:
MonoএবংFluxডেটা স্ট্রিম ম্যানেজ করতে ব্যবহৃত হয়। - Error Handling: কাস্টম এক্সসেপশন হ্যান্ডলিং সহজ।
- নতুন প্রজেক্টের জন্য স্ট্যান্ডার্ড পদ্ধতি।
WebClientহল Spring-এর ভবিষ্যত API ক্লায়েন্ট। তাই নতুন প্রজেক্টেRestTemplateএর পরিবর্তেWebClientব্যবহার করার সুপারিশ করা হয়।
Read more