Sorting in REST APIs
Sort PARAMETER, TYPICALLY, sort=fieldName,direction FORMAT mein, PASS kiya jaata hai — jaise ?sort=price,desc. MULTIPLE sort PARAMETERS, EK SAATH, PASS kiye ja sakte hain (jaise ?sort=category,asc&sort=price,desc), MULTI-FIELD SORTING ke liye.
Spring Data, AUTOMATICALLY, sort PARAMETER ko, Sort OBJECT mein, PARSE karके, Pageable ke ANDAR, EMBED kar deता hai — REPOSITORY QUERY, AUTOMATICALLY, ORDER BY CLAUSE, GENERATE kar leti hai, MANUAL SQL LIKHE BINA.
// Single field sort:
// GET /api/products?sort=price,desc
// Multi-field sort (category ASC, phir, PRICE DESC):
// GET /api/products?sort=category,asc&sort=price,desc
@GetMapping
public Page<ProductDto> getProducts(Pageable pageable) {
// pageable.getSort() mein, AUTOMATICALLY, SAARE SORT CRITERIA, PARSE ho chuke hain
return productRepository.findAll(pageable).map(this::toDto);
}
// Manually, EK Sort object BANANA (jaise DEFAULT ke liye):
Sort sort = Sort.by(Sort.Order.asc("category"), Sort.Order.desc("price"));- sort=field,direction format — multiple sort params, MULTI-FIELD sorting ke liye
- Spring Data, AUTOMATICALLY, Sort ko, Pageable mein, embed kar deता hai
- Client-controlled sorting mein, ALLOWED fields ki, WHITELIST rakhni chahiye
Sort.by(Sort.Order.asc("name").ignoreCase()), STRING FIELDS PAR, CASE-INSENSITIVE, SORTING ENABLE karta hai — WARNA, DATABASE, TYPICALLY, "Apple" ko, "banana" SE, PEHLE, SORT karega (UPPERCASE, ASCII mein, PEHLE AATA hai), JO, USER-EXPECTATION SE, MATCH NAHI karta.
SIMPLE, ENTITY FIELDS SE, ALAG, COMPUTED VALUES (jaise, "totalPrice = quantity * unitPrice") PAR, SORT karna, MUSHKIL hai — TYPICALLY, EK, DATABASE-LEVEL, VIEW, YA, NATIVE QUERY, ki, ZAROORAT, PADТI hai.
- Simple fields = Sort.by("fieldName") se, DIRECTLY, sort ho sakte hain
- Computed fields = native queries/views, ZAROORI ho sakte hain