<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Milan Mandal</title>
    <description>The latest articles on DEV Community by Milan Mandal (@milanmandal1).</description>
    <link>https://dev.to/milanmandal1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2297994%2F62494f29-176b-4d87-95ec-cc768454b59b.png</url>
      <title>DEV Community: Milan Mandal</title>
      <link>https://dev.to/milanmandal1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/milanmandal1"/>
    <language>en</language>
    <item>
      <title>Building a Rate Limiter in Java &amp; Spring Boot for Microservices</title>
      <dc:creator>Milan Mandal</dc:creator>
      <pubDate>Sun, 15 Mar 2026 19:31:54 +0000</pubDate>
      <link>https://dev.to/milanmandal1/building-a-rate-limiter-in-java-spring-boot-for-microservices-1i16</link>
      <guid>https://dev.to/milanmandal1/building-a-rate-limiter-in-java-spring-boot-for-microservices-1i16</guid>
      <description>&lt;p&gt;Modern distributed systems and APIs often face a common challenge: handling too many requests from clients.&lt;/p&gt;

&lt;p&gt;Without protection, a sudden surge in traffic can overload servers, cause downtime, or degrade performance.&lt;/p&gt;

&lt;p&gt;This is where Rate Limiting becomes essential.&lt;/p&gt;

&lt;p&gt;In this article, I will explain how I built a lightweight and extensible Rate Limiter using Java and Spring Boot that supports multiple rate-limiting strategies for microservices and APIs.&lt;/p&gt;

&lt;p&gt;🔗 Project Repository&lt;/p&gt;

&lt;p&gt;Source Code:&lt;/p&gt;

&lt;p&gt;[&lt;a href="https://github.com/milanmandal-1/Rate-Limiter" rel="noopener noreferrer"&gt;https://github.com/milanmandal-1/Rate-Limiter&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;What is Rate Limiting?&lt;/p&gt;

&lt;p&gt;Rate limiting is a technique used to control the number of requests a client can send to a server within a specific time period.&lt;/p&gt;

&lt;p&gt;It helps to:&lt;/p&gt;

&lt;p&gt;Prevent API abuse&lt;/p&gt;

&lt;p&gt;Protect backend services&lt;/p&gt;

&lt;p&gt;Improve system stability&lt;/p&gt;

&lt;p&gt;Ensure fair resource usage&lt;/p&gt;

&lt;p&gt;Many large platforms like Google, Amazon, and Netflix rely heavily on rate limiting to maintain reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technologies Used&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project uses modern backend technologies:&lt;/p&gt;

&lt;p&gt;Java&lt;/p&gt;

&lt;p&gt;Spring Boot&lt;/p&gt;

&lt;p&gt;Microservices Architecture&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;Service Registry&lt;/p&gt;

&lt;p&gt;Config Server&lt;/p&gt;

&lt;p&gt;The system is designed to integrate easily into distributed microservice environments.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;Rate Limiting Algorithms Implemented&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project supports multiple rate limiting strategies.&lt;/p&gt;

&lt;p&gt;1️⃣ Token Bucket Algorithm&lt;/p&gt;

&lt;p&gt;The Token Bucket algorithm allows a burst of traffic while maintaining an overall rate limit.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;p&gt;Tokens are added to a bucket at a fixed rate&lt;/p&gt;

&lt;p&gt;Each request consumes a token&lt;/p&gt;

&lt;p&gt;If the bucket is empty, the request is rejected&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;p&gt;✔ Allows traffic bursts&lt;br&gt;
✔ Smooth request flow&lt;br&gt;
✔ Widely used in APIs&lt;/p&gt;

&lt;p&gt;2️⃣ Fixed Window Algorithm&lt;/p&gt;

&lt;p&gt;The Fixed Window strategy counts requests within a fixed time window.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Limit = 100 requests&lt;/p&gt;

&lt;p&gt;Time window = 1 minute&lt;/p&gt;

&lt;p&gt;If a client sends more than 100 requests within that minute, further requests are rejected.&lt;/p&gt;

&lt;p&gt;Advantages:&lt;/p&gt;

&lt;p&gt;✔ Simple to implement&lt;br&gt;
✔ Efficient for small systems&lt;/p&gt;

&lt;p&gt;3️⃣ Sliding Window Algorithm&lt;/p&gt;

&lt;p&gt;The Sliding Window algorithm improves accuracy compared to fixed windows.&lt;/p&gt;

&lt;p&gt;Instead of resetting counters abruptly, it calculates requests based on a moving time window.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;p&gt;✔ More precise rate limiting&lt;br&gt;
✔ Prevents traffic spikes at window boundaries&lt;/p&gt;

&lt;p&gt;🏗 &lt;strong&gt;Microservices Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project demonstrates rate limiting inside a Spring Boot microservices ecosystem.&lt;/p&gt;

&lt;p&gt;Main components include:&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;p&gt;Service Registry&lt;/p&gt;

&lt;p&gt;Config Server&lt;/p&gt;

&lt;p&gt;Hotel Service&lt;/p&gt;

&lt;p&gt;Rating Service&lt;/p&gt;

&lt;p&gt;User Service&lt;/p&gt;

&lt;p&gt;The rate limiter can be integrated at the API Gateway level, ensuring all incoming requests are validated before reaching downstream services.&lt;/p&gt;

&lt;p&gt;📂 &lt;strong&gt;Project Structure&lt;/strong&gt;&lt;br&gt;
Rate-Limiter&lt;br&gt;
│&lt;br&gt;
├── ApiGateway&lt;br&gt;
├── ConfigServer&lt;br&gt;
├── ServiceRegistry&lt;br&gt;
├── HotelService&lt;br&gt;
├── RatingService&lt;br&gt;
├── UserService&lt;br&gt;
│&lt;br&gt;
├── README.md&lt;br&gt;
└── LICENSE&lt;/p&gt;

&lt;p&gt;This structure demonstrates a production-style microservices setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Rate Limit Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example configuration:&lt;/p&gt;

&lt;p&gt;Limit: 10 requests&lt;br&gt;
Time Window: 1 minute&lt;/p&gt;

&lt;p&gt;If a client sends:&lt;/p&gt;

&lt;p&gt;Request 1 → Allowed&lt;br&gt;
Request 2 → Allowed&lt;br&gt;
...&lt;br&gt;
Request 10 → Allowed&lt;br&gt;
Request 11 → Blocked&lt;/p&gt;

&lt;p&gt;This ensures backend services remain stable under heavy load.&lt;/p&gt;

&lt;p&gt;** Why Rate Limiting is Critical for APIs**&lt;/p&gt;

&lt;p&gt;Rate limiting protects APIs from:&lt;/p&gt;

&lt;p&gt;🚫 DDoS attacks&lt;br&gt;
🚫 API abuse&lt;br&gt;
🚫 Resource exhaustion&lt;/p&gt;

&lt;p&gt;It also helps maintain fair usage among multiple clients.&lt;/p&gt;

&lt;p&gt;** Real-World Use Cases**&lt;/p&gt;

&lt;p&gt;Rate limiters are widely used in:&lt;/p&gt;

&lt;p&gt;Public APIs&lt;/p&gt;

&lt;p&gt;Payment systems&lt;/p&gt;

&lt;p&gt;Authentication services&lt;/p&gt;

&lt;p&gt;Cloud platforms&lt;/p&gt;

&lt;p&gt;SaaS platforms&lt;/p&gt;

&lt;p&gt;Almost every major API provider uses some form of rate limiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future Improvements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some potential enhancements for this project include:&lt;/p&gt;

&lt;p&gt;Redis-based distributed rate limiting&lt;/p&gt;

&lt;p&gt;Kubernetes deployment&lt;/p&gt;

&lt;p&gt;Dynamic configuration updates&lt;/p&gt;

&lt;p&gt;Advanced monitoring with Grafana&lt;/p&gt;

&lt;p&gt;Integration with CI/CD pipelines&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>microservices</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>Modern API Testing Framework with Java + Rest Assured + Cucumber</title>
      <dc:creator>Milan Mandal</dc:creator>
      <pubDate>Sun, 15 Mar 2026 19:05:23 +0000</pubDate>
      <link>https://dev.to/milanmandal1/modern-api-testing-framework-with-java-rest-assured-cucumber-4cnb</link>
      <guid>https://dev.to/milanmandal1/modern-api-testing-framework-with-java-rest-assured-cucumber-4cnb</guid>
      <description>&lt;p&gt;In modern software development, API testing is critical to ensure backend services work correctly, reliably, and securely. Automated API testing helps teams validate endpoints quickly and integrate testing into CI/CD pipelines.&lt;/p&gt;

&lt;p&gt;To demonstrate a practical approach, I built an API Automation Framework using Java and BDD principles.&lt;/p&gt;

&lt;p&gt;This repository provides a clean and scalable structure to automate REST APIs efficiently.&lt;/p&gt;

&lt;p&gt;🔗 GitHub Repository&lt;br&gt;
&lt;a href="https://github.com/milanmandal-1/api-automation-framework" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 Why API Automation?&lt;/p&gt;

&lt;p&gt;Manual API testing with tools like Postman is useful for quick checks, but it becomes difficult to maintain when the number of test cases grows. A proper automation framework provides:&lt;/p&gt;

&lt;p&gt;✅ Faster regression testing&lt;br&gt;
✅ Reusable test components&lt;br&gt;
✅ CI/CD integration&lt;br&gt;
✅ Detailed reporting&lt;br&gt;
✅ Scalable architecture&lt;/p&gt;

&lt;p&gt;Automation frameworks built with Java + REST Assured + BDD are widely used in enterprise QA environments.&lt;/p&gt;

&lt;p&gt;🛠 Tech Stack Used&lt;/p&gt;

&lt;p&gt;This framework uses modern automation tools commonly used by SDET engineers:&lt;/p&gt;

&lt;p&gt;Java&lt;br&gt;
REST Assured&lt;br&gt;
Cucumber BDD&lt;br&gt;
Maven&lt;br&gt;
TestNG / JUnit&lt;br&gt;
JSON Schema Validation&lt;br&gt;
Git &amp;amp; GitHub&lt;/p&gt;

&lt;p&gt;📂 Project Structure&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;apiAutoFramework&lt;br&gt;
│&lt;br&gt;
├── src&lt;br&gt;
│   ├── main&lt;br&gt;
│   │   ├── java&lt;br&gt;
│   │   └── resources&lt;br&gt;
│   │&lt;br&gt;
│   └── test&lt;br&gt;
│       └── java&lt;br&gt;
│           └── com.electrolab.api&lt;br&gt;
│               │&lt;br&gt;
│               ├── base&lt;br&gt;
│               │   ├── ScenarioContext.java&lt;br&gt;
│               │   └── TestContext.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── config&lt;br&gt;
│               │   ├── ConfigManager.java&lt;br&gt;
│               │   └── Environment.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── hooks&lt;br&gt;
│               │   └── Hooks.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── managers&lt;br&gt;
│               │   ├── ApiManager.java&lt;br&gt;
│               │   └── TokenManager.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── mock&lt;br&gt;
│               │   ├── MockServer.java&lt;br&gt;
│               │   └── UserMock.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── models&lt;br&gt;
│               │   ├── AuthResponse.java&lt;br&gt;
│               │   └── User.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── runners&lt;br&gt;
│               │   └── TestRunners.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── specbuilder&lt;br&gt;
│               │   └── SpecBuilder.java&lt;br&gt;
│               │&lt;br&gt;
│               ├── stepdefinitions&lt;br&gt;
│               │   └── UserSteps.java&lt;br&gt;
│               │&lt;br&gt;
│               └── utils&lt;br&gt;
│                   ├── ApiClient.java&lt;br&gt;
│                   ├── JsonUtils.java&lt;br&gt;
│                   ├── LoggerUtils.java&lt;br&gt;
│                   └── RetryAnalyzer.java&lt;br&gt;
│&lt;br&gt;
└── resources&lt;br&gt;
    └── features&lt;br&gt;
        └── user.feature&lt;/p&gt;

&lt;p&gt;⚙️ Framework Features&lt;/p&gt;

&lt;p&gt;✔ BDD testing using Cucumber&lt;br&gt;
✔ API testing using RestAssured&lt;br&gt;
✔ Reusable RequestSpecBuilder&lt;br&gt;
✔ Token-based authentication handling&lt;br&gt;
✔ Environment configuration support&lt;br&gt;
✔ Modular and maintainable architecture&lt;br&gt;
✔ Logging and retry mechanisms&lt;br&gt;
✔ JSON utilities for request/response handling&lt;/p&gt;

&lt;p&gt;🧪 Sample BDD Scenario&lt;br&gt;
Feature: User API&lt;/p&gt;

&lt;p&gt;Scenario: Get users list&lt;br&gt;
Given User calls GET users API&lt;br&gt;
Then response status should be 200&lt;/p&gt;

&lt;p&gt;🧱 Request Specification Builder&lt;/p&gt;

&lt;p&gt;Reusable request configuration using SpecBuilder.&lt;/p&gt;

&lt;p&gt;public class SpecBuilder {&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static RequestSpecification getRequest() {
    return new RequestSpecBuilder()
            .setBaseUri(ConfigManager.get("qa.url"))
            .addHeader("Content-Type", "application/json")
            .build();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;🔐 Token Manager&lt;/p&gt;

&lt;p&gt;Handles authentication tokens dynamically and injects them into API requests.&lt;/p&gt;

&lt;p&gt;🔧 Running Tests&lt;br&gt;
Run using Maven&lt;/p&gt;

&lt;p&gt;Run from IDE&lt;br&gt;
Run the TestRunners.java file.&lt;/p&gt;

&lt;p&gt;📊 Future Enhancements&lt;/p&gt;

&lt;p&gt;Parallel execution&lt;/p&gt;

&lt;p&gt;Allure reports&lt;br&gt;
CI/CD integration (Jenkins / GitHub Actions)&lt;br&gt;
Dockerized test execution&lt;br&gt;
API contract testing&lt;br&gt;
Performance testing integration`&lt;/p&gt;

</description>
      <category>java</category>
      <category>restassured</category>
      <category>automationtesting</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
