Spring Cloud Contract এমন একটি টুল যা কনজিউমার-ড্রিভেন কন্ট্রাক্ট (Consumer-Driven Contract) তৈরিতে সহায়তা করে। এটি মূলত প্রোভাইডার (Provider) এবং কনজিউমার (Consumer) এর মধ্যে যোগাযোগের জন্য নির্দিষ্ট চুক্তি বা কন্ট্রাক্ট সংজ্ঞায়িত করতে ব্যবহৃত হয়।
Spring Cloud Contract এর মাধ্যমে API ইন্টারঅ্যাকশন গ্যারান্টি দেয়া যায়, যাতে নিশ্চিত করা যায় যে প্রোভাইডার এবং কনজিউমার উভয় পক্ষই একই কন্ট্রাক্ট অনুযায়ী কাজ করছে।
Consumer-Driven Contract কী?
কনজিউমার-ড্রিভেন কন্ট্রাক্ট (Consumer-Driven Contract) এমন একটি প্যাটার্ন যেখানে API এর কন্ট্রাক্ট কনজিউমার দ্বারা সংজ্ঞায়িত হয়। এটি নিশ্চিত করে যে কনজিউমাররা তাদের প্রয়োজনীয়তার উপর ভিত্তি করে প্রোভাইডারের আচরণ পরীক্ষা করতে পারে।
Spring Cloud Contract এর মূল উপাদান
- কন্ট্রাক্ট ডিফিনিশন (Contract Definition):
কন্ট্রাক্ট নির্ধারণ করার জন্য গ্রোভি (Groovy) বা YAML ফাইল ব্যবহার করা হয়। এটি API এর জন্য ইনপুট এবং আউটপুট নির্ধারণ করে। - প্রোভাইডার টেস্ট জেনারেশন (Provider Test Generation):
Spring Cloud Contract থেকে প্রোভাইডার API এর জন্য অটোমেটেড টেস্ট তৈরি করা হয়। - স্টাব জেনারেশন (Stub Generation):
স্টাব তৈরি করে যা কনজিউমার সাইড থেকে API পরীক্ষা করতে ব্যবহার করা যায়। - সার্ভিস ভারিফিকেশন (Service Verification):
কনজিউমার এবং প্রোভাইডার উভয় পক্ষই কন্ট্রাক্ট অনুযায়ী কাজ করছে কিনা তা যাচাই করা হয়।
Consumer-Driven Contract এর ধাপ
১. ডিপেনডেন্সি অ্যাড করা
build.gradle ফাইল বা pom.xml ফাইলে নিচের ডিপেনডেন্সি যুক্ত করুন:
Gradle:
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
testImplementation 'org.springframework.cloud:spring-cloud-contract-wiremock'
}
Maven:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-wiremock</artifactId>
<scope>test</scope>
</dependency>
২. কন্ট্রাক্ট ডিফাইন করা
গ্রোভি DSL ফাইল ব্যবহার করে কন্ট্রাক্ট তৈরি করুন।
Example Contract:
Contract.make {
description("Should return user details when a valid user ID is provided")
request {
method 'GET'
url '/users/1'
}
response {
status 200
body([
id: 1,
name: "John Doe",
email: "johndoe@example.com"
])
headers {
contentType('application/json')
}
}
}
৩. স্টাব জেনারেশন কনফিগার করা
স্টাব জেনারেট করতে spring-cloud-contract-maven-plugin ব্যবহার করা হয়।
Maven Plugin Configuration:
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>3.1.3</version>
<configuration>
<baseClassForTests>com.example.BaseTest</baseClassForTests>
</configuration>
</plugin>
৪. প্রোভাইডার টেস্ট চালানো
Spring Cloud Contract এর মাধ্যমে অটোমেটেড টেস্ট চালানোর জন্য BaseTest নামে একটি ক্লাস তৈরি করুন।
public abstract class BaseTest {
@BeforeEach
public void setup() {
RestAssured.baseURI = "http://localhost";
RestAssured.port = 8080;
}
}
টেস্ট রান করার পর Spring Cloud Contract নিশ্চিত করবে যে প্রোভাইডার নির্ধারিত কন্ট্রাক্ট মেনে চলছে।
৫. কনজিউমার টেস্ট
WireMock ব্যবহার করে কনজিউমার সাইড থেকে টেস্টিং করা যায়।
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0)
public class ConsumerTest {
@Test
public void testGetUserDetails() {
stubFor(get(urlEqualTo("/users/1"))
.willReturn(aResponse()
.withStatus(200)
.withBody("{ \"id\": 1, \"name\": \"John Doe\", \"email\": \"johndoe@example.com\" }")));
ResponseEntity<String> response = new RestTemplate().getForEntity("/users/1", String.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
}
Spring Cloud Contract ব্যবহার করে Consumer-Driven Contract বাস্তবায়ন করলে কনজিউমার এবং প্রোভাইডার উভয়ের মধ্যে নির্ভরযোগ্যতা নিশ্চিত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে একটি গুরুত্বপূর্ণ পদ্ধতি।
Read more