Why flexible querying empowers clients in Rest API - Performance Analysis
When clients can ask for exactly the data they want, the server must handle different query options. This affects how long the server takes to respond.
We want to understand how the time to answer grows as clients ask for more or different data.
Analyze the time complexity of the following flexible query handler.
GET /items?fields=name,price&filter=price>100&sort=price
// Server-side pseudo-code
function handleQuery(request) {
let data = database.getAllItems();
if (request.filter) {
data = data.filter(item => applyFilter(item, request.filter));
}
if (request.sort) {
data = data.sort((a, b) => compare(a, b, request.sort));
}
if (request.fields) {
data = data.map(item => pickFields(item, request.fields));
}
return data;
}
This code gets all items, then filters, sorts, and selects fields based on client query.
Look at the parts that repeat over the data:
- Primary operation: Filtering and mapping over all items.
- How many times: Each item is checked once for filtering, once for mapping fields, and sorting compares items multiple times.
As the number of items grows, the work grows too:
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 filter checks, 10 map operations, and a few sorts |
| 100 | About 100 filter checks, 100 map operations, and more sorting comparisons |
| 1000 | About 1000 filter checks, 1000 map operations, and many sorting comparisons |
Pattern observation: The work grows roughly in proportion to the number of items, with sorting adding extra comparisons.
Time Complexity: O(n log n)
This means the time grows a bit faster than the number of items because sorting takes extra steps, but filtering and selecting fields grow directly with items.
[X] Wrong: "Filtering and selecting fields make the query time constant because they are simple."
[OK] Correct: Even simple checks happen for every item, so the time grows as the list grows, not fixed.
Understanding how flexible queries affect time helps you explain real API performance. It shows you can think about how code handles different client needs efficiently.
"What if the server used a database query to filter and sort instead of filtering and sorting in code? How would the time complexity change?"
Practice
Solution
Step 1: Understand flexible querying purpose
Flexible querying lets clients specify exactly what data they want.Step 2: Identify benefit to clients
This reduces unnecessary data transfer and speeds up responses.Final Answer:
It allows clients to request only the data they need, reducing data transfer. -> Option CQuick Check:
Flexible querying = request needed data only [OK]
- Thinking flexible querying sends all data always
- Believing it slows down the server
- Confusing filtering with disabling options
Solution
Step 1: Identify query parameter for selecting fields
The 'fields' parameter is used to specify which fields to return.Step 2: Match correct syntax
Using 'fields=name,email' correctly requests only those fields.Final Answer:
/users?fields=name,email -> Option AQuick Check:
fields param selects fields [OK]
- Using 'filter' to select fields instead of filter data
- Using 'sort' to select fields
- Using 'select' which is not standard here
/products?filter=price>20&sort=price, what is the expected behavior?Solution
Step 1: Analyze the filter parameter
The filter 'price>20' means select products priced above 20.Step 2: Analyze the sort parameter
The sort 'price' means sort results by price in ascending order by default.Final Answer:
Return products with price greater than 20, sorted by price ascending. -> Option AQuick Check:
filter price>20 + sort price ascending = Return products with price greater than 20, sorted by price ascending. [OK]
- Confusing greater than with less than
- Assuming sort defaults to descending
- Thinking query causes syntax error
/orders?filter=status=shipped&fields=id,total but receives all fields in the response. What is the likely issue?Solution
Step 1: Check server support for 'fields'
If the server ignores 'fields', it returns all fields regardless of query.Step 2: Validate filter syntax
The filter syntax 'status=shipped' is correct and should work if supported.Final Answer:
The server does not support the 'fields' parameter. -> Option DQuick Check:
Unsupported 'fields' param = all fields returned [OK]
- Assuming filter syntax error causes ignoring fields
- Thinking 'select' is required instead of 'fields'
- Believing invalid filter returns all data
Solution
Step 1: Identify correct filter syntax
Filter uses 'filter=category=electronics' to select category.Step 2: Identify correct sort syntax
Sort '-price' means descending by price.Step 3: Identify correct fields syntax
Fields are comma-separated: 'fields=id,name,price'.Final Answer:
/products?filter=category=electronics&sort=-price&fields=id,name,price -> Option BQuick Check:
filter + sort desc + fields comma = /products?filter=category=electronics&sort=-price&fields=id,name,price [OK]
- Using wrong separators like ; or |
- Incorrect sort syntax like 'price-desc' or 'price_desc'
- Using 'select' instead of 'fields'
Ready to prove it?
Pass the test and this pattern moves unknown
