API analytics and usage metrics in Rest API - Time & Space Complexity
When tracking API usage and analytics, it is important to understand how the time to process data grows as more requests come in.
We want to know how the system handles increasing amounts of usage data efficiently.
Analyze the time complexity of the following code snippet.
// Example: Counting API calls per user
function countApiCalls(requests) {
const counts = {};
for (const req of requests) {
counts[req.userId] = (counts[req.userId] || 0) + 1;
}
return counts;
}
This code counts how many API calls each user has made from a list of requests.
- Primary operation: Looping through each API request once.
- How many times: Exactly once for each request in the input list.
As the number of API requests grows, the time to count calls grows in a similar way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 steps |
| 100 | About 100 steps |
| 1000 | About 1000 steps |
Pattern observation: The work grows directly with the number of requests, so doubling requests doubles the work.
Time Complexity: O(n)
This means the time to count API calls grows in a straight line with the number of requests.
[X] Wrong: "Counting API calls takes the same time no matter how many requests there are."
[OK] Correct: The code must look at each request once, so more requests mean more work and more time.
Understanding how API usage data scales helps you design systems that handle growing traffic smoothly.
"What if we also needed to find the top user with the most API calls? How would the time complexity change?"
Practice
Solution
Step 1: Understand API analytics role
API analytics collect data on API usage and performance.Step 2: Identify main goal
The main goal is to track usage and detect problems.Final Answer:
To track how the API is used and find issues -> Option DQuick Check:
API analytics = usage tracking [OK]
- Confusing analytics with encryption
- Thinking analytics create endpoints
- Assuming analytics generate docs
Solution
Step 1: Identify HTTP method for data retrieval
GET is used to request data without changing it.Step 2: Check query parameter syntax
Query parameters follow ?key=value format, so ?group_by=date is correct.Final Answer:
GET /metrics?group_by=date -> Option CQuick Check:
GET + ?group_by=date = correct syntax [OK]
- Using POST instead of GET for data retrieval
- Incorrect query parameter placement
- Confusing URL path with query parameters
GET /api/usage?start=2024-01-01&end=2024-01-07&group_by=endpoint, what is the expected output?Solution
Step 1: Analyze query parameters
start and end define the date range; group_by=endpoint means grouping results by endpoint.Step 2: Determine output meaning
The API returns usage data grouped by endpoint for the specified date range.Final Answer:
Usage data grouped by API endpoint from Jan 1 to Jan 7, 2024 -> Option AQuick Check:
start/end + group_by=endpoint = grouped usage data [OK]
- Ignoring group_by parameter effect
- Assuming single date instead of range
- Thinking group_by is invalid
GET /metrics?start_date=2024-01-01&end_date=2024-01-07&groupby=endpointWhat is the likely cause?
Solution
Step 1: Check query parameter names
The API expects 'start', 'end', and 'group_by' parameters, not 'start_date', 'end_date', or 'groupby'.Step 2: Understand error cause
Wrong parameter names cause the API to reject the request with 400 Bad Request.Final Answer:
Incorrect query parameter names; should be 'start' and 'end' and 'group_by' -> Option AQuick Check:
Parameter names must match API spec [OK]
- Using wrong parameter names
- Thinking GET can't have query parameters
- Assuming missing API key causes 400 error
Solution
Step 1: Identify required parameters
We need a date range (last 30 days), grouping by endpoint, and metrics count and average response time.Step 2: Match API call to requirements
GET /api/metrics?start=2024-05-01&end=2024-05-30&group_by=endpoint&metrics=count,response_time_avg uses GET with start/end dates, group_by=endpoint, and metrics=count,response_time_avg which fits perfectly.Step 3: Check other options
POST /api/metrics with JSON body {"group_by":"endpoint","metrics":["count","response_time_avg"]} uses POST which is unusual for fetching metrics; A uses different parameter names not standard; D lacks metrics selection.Final Answer:
GET /api/metrics?start=2024-05-01&end=2024-05-30&group_by=endpoint&metrics=count,response_time_avg -> Option BQuick Check:
Date range + group_by + metrics = GET /api/metrics?start=2024-05-01&end=2024-05-30&group_by=endpoint&metrics=count,response_time_avg [OK]
- Using POST instead of GET for data retrieval
- Missing metrics parameter
- Using incorrect parameter names
Ready to prove it?
Pass the test and this pattern moves unknown
