<?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: Akash Bhuiyan</title>
    <description>The latest articles on DEV Community by Akash Bhuiyan (@akash_bhuiyan_95c5dbf3b53).</description>
    <link>https://dev.to/akash_bhuiyan_95c5dbf3b53</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%2F3705945%2F9f9b15d5-ccef-4890-aae2-b90a396eb442.png</url>
      <title>DEV Community: Akash Bhuiyan</title>
      <link>https://dev.to/akash_bhuiyan_95c5dbf3b53</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akash_bhuiyan_95c5dbf3b53"/>
    <language>en</language>
    <item>
      <title>Building EmbedQA: An Open Source API Testing Tool with Spring Boot 🚀</title>
      <dc:creator>Akash Bhuiyan</dc:creator>
      <pubDate>Mon, 12 Jan 2026 15:52:56 +0000</pubDate>
      <link>https://dev.to/akash_bhuiyan_95c5dbf3b53/building-embedqa-an-open-source-api-testing-tool-with-spring-boot-cbm</link>
      <guid>https://dev.to/akash_bhuiyan_95c5dbf3b53/building-embedqa-an-open-source-api-testing-tool-with-spring-boot-cbm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vrdurzizjmxmv53ykzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vrdurzizjmxmv53ykzc.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🚀 Build EmbedQA Backend: Professional API Testing Platform
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/AkashBhuiyan/embedqa" rel="noopener noreferrer"&gt;EmbedQA GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey backend developers! 👋&lt;/p&gt;

&lt;p&gt;Are you passionate about Java, Spring Boot, and building robust APIs? Want to contribute to an open-source project that helps developers worldwide test their APIs better? Join us in building &lt;strong&gt;EmbedQA&lt;/strong&gt; - a modern, open-source API testing platform (think Postman alternative)!&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 What is EmbedQA?
&lt;/h2&gt;

&lt;p&gt;EmbedQA is a full-stack API testing platform designed to give developers a powerful, free alternative to commercial API testing tools. The backend is the heart of this platform, handling everything from executing HTTP requests to managing collections, environments, and request history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What We're Building:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 HTTP request execution engine with full protocol support&lt;/li&gt;
&lt;li&gt;📦 Collections management for organizing API endpoints&lt;/li&gt;
&lt;li&gt;🌍 Environment variables system for different deployment stages&lt;/li&gt;
&lt;li&gt;📝 Request history with analytics&lt;/li&gt;
&lt;li&gt;🔐 Multiple authentication mechanisms&lt;/li&gt;
&lt;li&gt;🚀 High-performance, scalable REST API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Tech Stack
&lt;/h2&gt;

&lt;p&gt;We're using industry-standard, modern Java technologies:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Latest LTS with modern features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spring Boot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.5.7&lt;/td&gt;
&lt;td&gt;Robust, production-ready framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spring Data JPA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Simplified database operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Reliable, powerful relational database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Apache HttpClient&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.3&lt;/td&gt;
&lt;td&gt;HTTP request execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.9+&lt;/td&gt;
&lt;td&gt;Dependency management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Easy database setup &amp;amp; deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why This Stack?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Java 21&lt;/strong&gt;: Modern syntax, Records, Pattern Matching, Virtual Threads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spring Boot 3.5&lt;/strong&gt;: Production-proven, extensive ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt;: Advanced features, JSON support, excellent performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache HttpClient 5&lt;/strong&gt;: Industry-standard HTTP client library&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Project Goals
&lt;/h2&gt;

&lt;p&gt;We're building EmbedQA backend to be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Robust&lt;/strong&gt;: Handle edge cases, errors gracefully&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable&lt;/strong&gt;: Support thousands of concurrent requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainable&lt;/strong&gt;: Clean architecture, SOLID principles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testable&lt;/strong&gt;: Comprehensive unit and integration tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Well-documented&lt;/strong&gt;: Clear API docs with Swagger/OpenAPI&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🚀 Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to contribute? Here's how to get the backend running locally:&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Java 21 (JDK)&lt;/li&gt;
&lt;li&gt;Maven 3.9+&lt;/li&gt;
&lt;li&gt;PostgreSQL 16 (we recommend Docker)&lt;/li&gt;
&lt;li&gt;Your favorite IDE (IntelliJ IDEA, Eclipse, VS Code)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Fork and clone the repository&lt;/span&gt;
git clone https://github.com/YOUR_USERNAME/embedqa.git
&lt;span class="nb"&gt;cd &lt;/span&gt;embedqa

&lt;span class="c"&gt;# 2. Start PostgreSQL with Docker (easiest way)&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;docker-compose/db
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../..

&lt;span class="c"&gt;# 3. Run the application&lt;/span&gt;
./mvnw spring-boot:run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API will be available at &lt;code&gt;http://localhost:8085&lt;/code&gt; 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  Database Setup (Alternative)
&lt;/h3&gt;

&lt;p&gt;If you prefer installing PostgreSQL locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create database and user&lt;/span&gt;
psql postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;embedqa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="n"&gt;embedqa_user&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;ENCRYPTED&lt;/span&gt; &lt;span class="n"&gt;PASSWORD&lt;/span&gt; &lt;span class="s1"&gt;'embedqa_pass'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;embedqa&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;embedqa_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="n"&gt;embedqa&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;embedqa_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verify Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check if the API is running&lt;/span&gt;
curl http://localhost:8085/api/v1/collections

&lt;span class="c"&gt;# View API documentation&lt;/span&gt;
open http://localhost:8085/swagger-ui.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📁 Project Architecture
&lt;/h2&gt;

&lt;p&gt;We follow &lt;strong&gt;clean architecture&lt;/strong&gt; principles with clear separation of concerns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/main/java/com/akash/embedqa/
├── EmbedqaApplication.java         # Main application entry point
├── config/                         # Configuration classes
│   ├── HttpClientConfig.java       # Apache HttpClient setup
│   └── WebConfig.java              # CORS, interceptors
├── controller/                     # REST API endpoints
│   ├── ApiExecutorController.java  # Execute HTTP requests
│   ├── CollectionController.java   # Collections CRUD
│   ├── EnvironmentController.java  # Environments CRUD
│   ├── RequestController.java      # Saved requests CRUD
│   └── HistoryController.java      # Request history
├── service/                        # Business logic layer
│   ├── ApiExecutorService.java     # HTTP execution logic
│   ├── CollectionService.java      # Collections management
│   ├── EnvironmentService.java     # Environment management
│   ├── RequestService.java         # Request management
│   └── HistoryService.java         # History tracking
├── repository/                     # Data access layer
│   ├── ApiCollectionRepository.java
│   ├── ApiRequestRepository.java
│   ├── ApiResponseRepository.java
│   ├── EnvironmentRepository.java
│   ├── EnvironmentVariableRepository.java
│   └── RequestHistoryRepository.java
├── model/                          # Domain models
│   ├── entities/                   # JPA entities
│   │   ├── ApiCollection.java
│   │   ├── ApiRequest.java
│   │   ├── ApiResponse.java
│   │   ├── Environment.java
│   │   ├── EnvironmentVariable.java
│   │   └── RequestHistory.java
│   └── dtos/                       # Data Transfer Objects
│       ├── request/                # Request DTOs
│       └── response/               # Response DTOs
├── enums/                          # Enumerations
│   ├── HttpMethod.java             # HTTP methods
│   ├── BodyType.java               # Request body types
│   └── AuthType.java               # Authentication types
├── exception/                      # Exception handling
│   ├── GlobalExceptionHandler.java # Centralized error handling
│   ├── ApiExecutionException.java
│   └── ResourceNotFoundException.java
├── converter/                      # Type converters
│   ├── AuthConfigConverter.java    # JPA converters
│   └── EnvironmentVariablesConverter.java
└── utils/                          # Utility classes
    └── HashMapConverter.java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎁 Good First Issues
&lt;/h2&gt;

&lt;p&gt;Perfect entry points for new contributors:&lt;/p&gt;

&lt;h3&gt;
  
  
  🟢 Beginner-Friendly
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add request timeout configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make HTTP request timeout configurable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Java, Spring Boot configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;ApiExecutorServiceImpl.java&lt;/code&gt;, &lt;code&gt;application.yml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improve error messages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return more descriptive error messages in API responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Java, exception handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;GlobalExceptionHandler.java&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add request/response size limits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement size validation for large payloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Java, Spring Boot validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;ApiExecutorServiceImpl.java&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🟡 Intermediate
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implement request history pagination&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add pagination support for history endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Spring Data JPA, pagination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;HistoryService.java&lt;/code&gt;, &lt;code&gt;HistoryController.java&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add request statistics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track average response times, success rates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: JPA queries, aggregation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;HistoryService.java&lt;/code&gt;, create &lt;code&gt;StatisticsService.java&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Support multipart file uploads&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handle file uploads in request bodies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Spring multipart handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;ApiExecutorServiceImpl.java&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;WebSocket support&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add WebSocket testing capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Spring WebSocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: Create new WebSocket module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔴 Advanced
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GraphQL support&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add GraphQL query execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: GraphQL, HTTP clients&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: Create new GraphQL module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Request chaining engine&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract values from one response to use in next request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Complex logic, JSON parsing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: &lt;code&gt;ApiExecutorService.java&lt;/code&gt;, create chaining logic&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mock server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in mock API server for testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills needed&lt;/strong&gt;: Advanced Spring, dynamic routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files&lt;/strong&gt;: Create new mock server module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🤝 Contribution Guidelines
&lt;/h2&gt;

&lt;p&gt;We make contributing easy and rewarding!&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Contribute
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browse issues&lt;/strong&gt; and find one that interests you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comment&lt;/strong&gt; to claim the issue (we'll assign it to you)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork&lt;/strong&gt; the repository&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a branch&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/your-feature-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Make your changes&lt;/strong&gt; with clear commits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write tests&lt;/strong&gt; for your changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run tests&lt;/strong&gt; to ensure nothing breaks
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ./mvnw &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Submit a PR&lt;/strong&gt; with a detailed description&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Code Style Guidelines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Follow &lt;strong&gt;Java naming conventions&lt;/strong&gt; (camelCase, PascalCase)&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;meaningful variable/method names&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Write &lt;strong&gt;Javadoc&lt;/strong&gt; for public methods&lt;/li&gt;
&lt;li&gt;Keep methods &lt;strong&gt;short and focused&lt;/strong&gt; (&amp;lt; 30 lines ideally)&lt;/li&gt;
&lt;li&gt;Follow &lt;strong&gt;SOLID principles&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Spring best practices&lt;/strong&gt; (constructor injection, etc.)&lt;/li&gt;
&lt;li&gt;Write &lt;strong&gt;unit tests&lt;/strong&gt; for services, &lt;strong&gt;integration tests&lt;/strong&gt; for controllers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Testing Requirements
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example service test&lt;/span&gt;
&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;shouldExecuteGetRequest&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Given&lt;/span&gt;
    &lt;span class="nc"&gt;ExecuteRequestDTO&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;createTestRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// When&lt;/span&gt;
    &lt;span class="nc"&gt;ApiResponseDTO&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;apiExecutorService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Then&lt;/span&gt;
    &lt;span class="n"&gt;assertThat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getStatusCode&lt;/span&gt;&lt;span class="o"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;isEqualTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;assertThat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBody&lt;/span&gt;&lt;span class="o"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;isNotNull&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📚 API Endpoints Overview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Execute API Request
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/v1/execute
Content-Type: application/json

{
  "method": "GET",
  "url": "https://api.example.com/users",
  "headers": [
    {"key": "Authorization", "value": "Bearer token", "enabled": true}
  ],
  "queryParams": [
    {"key": "page", "value": "1", "enabled": true}
  ],
  "body": null,
  "bodyType": "NONE",
  "authType": "BEARER_TOKEN",
  "authConfig": {
    "token": "your-token-here"
  }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Collections Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET    /api/v1/collections          # List all collections
GET    /api/v1/collections/{id}     # Get collection by ID
POST   /api/v1/collections          # Create collection
PUT    /api/v1/collections/{id}     # Update collection
DELETE /api/v1/collections/{id}     # Delete collection
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET    /api/v1/environments         # List all environments
POST   /api/v1/environments         # Create environment
PUT    /api/v1/environments/{id}    # Update environment
DELETE /api/v1/environments/{id}    # Delete environment
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Request History
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET    /api/v1/history              # Get request history
GET    /api/v1/history/{id}         # Get history item details
DELETE /api/v1/history/{id}         # Delete history item
GET    /api/v1/history/stats        # Get usage statistics
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌟 Why Contribute to EmbedQA Backend?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Your Career
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build &lt;strong&gt;production-grade&lt;/strong&gt; Spring Boot applications&lt;/li&gt;
&lt;li&gt;Learn &lt;strong&gt;clean architecture&lt;/strong&gt; and best practices&lt;/li&gt;
&lt;li&gt;Work with &lt;strong&gt;modern Java 21&lt;/strong&gt; features&lt;/li&gt;
&lt;li&gt;Gain experience with &lt;strong&gt;real-world scenarios&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Learning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Master &lt;strong&gt;Spring Boot 3.x&lt;/strong&gt; ecosystem&lt;/li&gt;
&lt;li&gt;Practice &lt;strong&gt;RESTful API design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Learn &lt;strong&gt;database optimization&lt;/strong&gt; with JPA&lt;/li&gt;
&lt;li&gt;Understand &lt;strong&gt;HTTP protocol&lt;/strong&gt; deeply&lt;/li&gt;
&lt;li&gt;Write &lt;strong&gt;professional-grade tests&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For the Community
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Help developers worldwide test APIs efficiently&lt;/li&gt;
&lt;li&gt;Build a &lt;strong&gt;free alternative&lt;/strong&gt; to expensive tools&lt;/li&gt;
&lt;li&gt;Contribute to &lt;strong&gt;open-source&lt;/strong&gt; Java ecosystem&lt;/li&gt;
&lt;li&gt;Mentor other developers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 Development Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Running Tests
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run all tests&lt;/span&gt;
./mvnw &lt;span class="nb"&gt;test&lt;/span&gt;

&lt;span class="c"&gt;# Run specific test class&lt;/span&gt;
./mvnw &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-Dtest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ApiExecutorServiceTest

&lt;span class="c"&gt;# Run with coverage&lt;/span&gt;
./mvnw &lt;span class="nb"&gt;test &lt;/span&gt;jacoco:report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Database Migrations
&lt;/h3&gt;

&lt;p&gt;We use Flyway for database migrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Example migration: V1__Create_collections_table.sql&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;BIGSERIAL&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration Profiles
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# application-dev.yml (Development)&lt;/span&gt;
&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;datasource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jdbc:postgresql://localhost:5432/embedqa&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;embedqa_user&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;embedqa_pass&lt;/span&gt;

&lt;span class="c1"&gt;# application-prod.yml (Production)&lt;/span&gt;
&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;datasource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DATABASE_URL}&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DATABASE_USERNAME}&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DATABASE_PASSWORD}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📖 Resources
&lt;/h2&gt;

&lt;p&gt;Need to brush up on skills?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-boot" rel="noopener noreferrer"&gt;Spring Boot Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/guides/gs/accessing-data-jpa/" rel="noopener noreferrer"&gt;Spring Data JPA Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/16/" rel="noopener noreferrer"&gt;PostgreSQL Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hc.apache.org/httpcomponents-client-5.3.x/" rel="noopener noreferrer"&gt;Apache HttpClient Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Our &lt;a href="https://github.com/AkashBhuiyan/embedqa/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💬 Join the Community
&lt;/h2&gt;

&lt;p&gt;Questions or ideas? Let's talk!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 &lt;strong&gt;Issues&lt;/strong&gt;: &lt;a href="https://github.com/AkashBhuiyan/embedqa/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Discussions&lt;/strong&gt;: &lt;a href="https://github.com/AkashBhuiyan/embedqa/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;Frontend&lt;/strong&gt;: &lt;a href="https://github.com/AkashBhuiyan/embedqa-ui" rel="noopener noreferrer"&gt;embedqa-ui repository&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎉 What We've Built So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ HTTP request execution engine (all methods)&lt;/li&gt;
&lt;li&gt;✅ Authentication support (Bearer, Basic, API Key)&lt;/li&gt;
&lt;li&gt;✅ Collections CRUD operations&lt;/li&gt;
&lt;li&gt;✅ Environment management&lt;/li&gt;
&lt;li&gt;✅ Request history tracking&lt;/li&gt;
&lt;li&gt;✅ PostgreSQL database schema&lt;/li&gt;
&lt;li&gt;✅ Comprehensive error handling&lt;/li&gt;
&lt;li&gt;✅ Docker development environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Coming Soon:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔜 Request chaining&lt;/li&gt;
&lt;li&gt;🔜 WebSocket support&lt;/li&gt;
&lt;li&gt;🔜 GraphQL support&lt;/li&gt;
&lt;li&gt;🔜 Mock server&lt;/li&gt;
&lt;li&gt;🔜 Advanced analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Ready to Start?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star&lt;/strong&gt; the &lt;a href="https://github.com/AkashBhuiyan/embedqa" rel="noopener noreferrer"&gt;repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🍴 &lt;strong&gt;Fork&lt;/strong&gt; it&lt;/li&gt;
&lt;li&gt;📖 Read our &lt;a href="https://github.com/AkashBhuiyan/embedqa/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📋 Check &lt;a href="https://github.com/AkashBhuiyan/embedqa/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;Good First Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Introduce yourself in &lt;a href="https://github.com/AkashBhuiyan/embedqa/discussions" rel="noopener noreferrer"&gt;Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  👨‍💻 About the Maintainer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Akash Bhuiyan&lt;/strong&gt; - Creator and maintainer of EmbedQA&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/AkashBhuiyan" rel="noopener noreferrer"&gt;@AkashBhuiyan&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Let's build the future of API testing together!&lt;/strong&gt; Whether you're a Java veteran or learning Spring Boot, there's a place for you on the EmbedQA team. We value every contribution, from documentation improvements to major features. 🎉&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have questions? Drop a comment below or open a discussion on GitHub!&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔖 Tags
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;#java&lt;/code&gt; &lt;code&gt;#springboot&lt;/code&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#backend&lt;/code&gt; &lt;code&gt;#postgresql&lt;/code&gt; &lt;code&gt;#rest&lt;/code&gt; &lt;code&gt;#api&lt;/code&gt; &lt;code&gt;#hacktoberfest&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  java #springboot #opensource #api #webdev #programming #tutorial
&lt;/h1&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>opensource</category>
      <category>api</category>
    </item>
  </channel>
</rss>
