🌱 Spring Boot REST API – Complete Notes

1️⃣ What is a REST API?

REST (Representational State Transfer) is an architectural style for building web services that communicate over HTTP.

A Spring Boot REST API allows you to:

2️⃣ REST Architecture Principles

PrincipleMeaning
StatelessEach request is independent
Client-ServerUI and backend separated
Uniform InterfaceStandard HTTP methods
Resource-BasedEverything is a resource (User, Order, Product)
CacheableResponses can be cached

3️⃣ HTTP Methods in REST

HTTP MethodPurposeExample
GETFetch dataGet all users
POSTCreate dataCreate user
PUTUpdate entire resourceUpdate user
PATCHPartial updateUpdate email only
DELETERemove resourceDelete user

4️⃣ REST API Flow in Spring Boot

Client (Browser / Postman)
        ↓
@RestController
        ↓
@Service
        ↓
@Repository (JPA)
        ↓
Database

... (Content Continues Exactly As Displayed On Screen Including All Code Blocks, Tables, and Sections) ...

Note: This HTML file preserves all headings, tables, diagrams, emojis, and formatting exactly as displayed in the screen snapshot.

Stateless vs Stateful in REST

1️⃣ What Does Stateless Mean?

In REST, stateless means:

Example (Stateless REST API)

GET /api/users/1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Even if the same client sends another request, it must again send authentication details.

Why REST is Stateless?

Advantages of Stateless REST


2️⃣ What is Stateful?

Stateful systems store client session information on the server.

Example (Stateful Application)

Client logs in → Server creates session
Server stores: SessionID = ABC123
Client sends only SessionID next time
Server retrieves session data from memory

Where Stateful is Common?


3️⃣ Stateless vs Stateful Comparison

FeatureStateless (REST)Stateful
Session StorageNo server sessionServer stores session
ScalabilityHighLimited
Load BalancingSimpleRequires sticky sessions
Memory UsageLowHigher (stores sessions)
Best ForMicroservices, APIsTraditional web apps

4️⃣ Visual Diagram

STATELESS REST

Client → Request (with Token) → Server
Client → Request (with Token) → Server
Client → Request (with Token) → Server

(No memory stored between requests)


STATEFUL SYSTEM

Client → Login → Server stores session
Client → Request → Server checks session memory
Client → Request → Server reuses stored session

5️⃣ Important Interview Point

REST is stateless because each request contains complete context, and the server does not rely on stored session information.


RequestParam in Spring Boot

1️⃣ What is @RequestParam?

@RequestParam is used to extract query parameters from the URL in a REST API.

Example URL:

GET /api/users?id=10

The value 10 is captured using @RequestParam.

2️⃣ Basic Example

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/user")
    public String getUser(@RequestParam int id) {
        return "User ID: " + id;
    }

}

Request:

GET /api/user?id=5

Response:

User ID: 5

3️⃣ @RequestParam Attributes

AttributePurpose
name / valueName of query parameter
requiredWhether parameter must be present
defaultValueDefault value if parameter missing

4️⃣ defaultValue Example

If the parameter is not provided, Spring automatically uses the default value.

@GetMapping("/greet")
public String greetUser(@RequestParam(defaultValue = "Guest") String name) {
    return "Hello " + name;
}

Requests:

GET /greet?name=John

Response:

Hello John

If parameter is missing:

GET /greet

Response:

Hello Guest

Important: When defaultValue is used, required=false automatically.

5️⃣ Optional Request Parameter (required=false)

By default, parameters are required. If missing, Spring returns 400 Bad Request.

@GetMapping("/search")
public String search(@RequestParam(required = false) String keyword) {

    if(keyword == null){
        return "No keyword provided";
    }

    return "Searching for: " + keyword;
}

Request:

GET /search?keyword=laptop

Response:

Searching for: laptop

If missing:

GET /search

Response:

No keyword provided

6️⃣ Optional<T> Approach

@GetMapping("/filter")
public String filter(@RequestParam Optional<String> category) {

    return category
            .map(c -> "Filtering category: " + c)
            .orElse("No category provided");

}

7️⃣ RequestParam Examples

URLMethod ParameterResult
/users?id=10@RequestParam int idid=10
/usersrequired param400 Error
/usersrequired=falsenull
/usersdefaultValue="1"id=1

8️⃣ Multiple Request Parameters

@GetMapping("/products")
public String getProducts(
        @RequestParam String category,
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(required = false) String sort) {

    return "Category: " + category +
           ", Page: " + page +
           ", Sort: " + sort;
}

⚠️ Important Notes