Retry-After header in Rest API - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When using the Retry-After header in REST APIs, it's important to understand how the server handles repeated requests over time.
We want to know how the number of retries affects the server's processing time.
Analyze the time complexity of the following code snippet.
// Pseudocode for handling Retry-After header
function handleRequest(request) {
if (serverIsBusy()) {
return response(503, { 'Retry-After': 10 });
} else {
return processRequest(request);
}
}
This code checks if the server is busy and, if so, tells the client to retry after 10 seconds. Otherwise, it processes the request immediately.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The client retries sending the request after waiting the specified time.
- How many times: Depends on how many times the server responds with Retry-After before processing succeeds.
Each retry causes the server to handle the request again, increasing total processing time linearly with the number of retries.
| Number of Retries (n) | Approx. Server Handling Operations |
|---|---|
| 1 | 1 request handling |
| 5 | 5 request handlings |
| 10 | 10 request handlings |
Pattern observation: The total work grows directly with the number of retries.
Time Complexity: O(n)
This means the total time the server spends grows linearly with the number of retry attempts.
[X] Wrong: "The Retry-After header makes the server handle all retries instantly without extra cost."
[OK] Correct: Each retry is a new request the server must process, so the total work adds up with each retry.
Understanding how retry mechanisms affect server load helps you design APIs that handle traffic smoothly and avoid overload.
What if the Retry-After header used exponential backoff instead of a fixed time? How would the time complexity change?
Practice
What is the main purpose of the Retry-After header in REST APIs?
Solution
Step 1: Understand the role of Retry-After header
The Retry-After header is used by servers to tell clients when they can retry a request after being told to wait.Step 2: Match purpose with options
To tell the client how long to wait before making another request correctly states that it tells the client how long to wait before retrying, which matches the header's purpose.Final Answer:
To tell the client how long to wait before making another request -> Option CQuick Check:
Retry-After = wait time before retry [OK]
- Confusing Retry-After with content type headers
- Thinking Retry-After provides server time
- Assuming Retry-After sends client info
Which of the following is a correct example of the Retry-After header syntax?
Retry-After: ?
Solution
Step 1: Review Retry-After header formats
Retry-After accepts either a number of seconds (integer) or a HTTP-date string.Step 2: Check each option
120 seconds includes invalid text; "120 seconds" incorrectly quotes the number with text; Wed, 21 Oct 2015 07:28:00 GMT is a valid HTTP-date format; After 2 minutes is not a valid format.Final Answer:
Wed, 21 Oct 2015 07:28:00 GMT -> Option AQuick Check:
Retry-After = seconds or HTTP-date [OK]
- Adding quotes around seconds value
- Using natural language like 'After 2 minutes'
- Using invalid date formats
Given the following HTTP response header:
HTTP/1.1 503 Service Unavailable Retry-After: 60
What should the client do?
Solution
Step 1: Interpret the Retry-After header value
The header value '60' means the client should wait 60 seconds before retrying.Step 2: Match client action to header instruction
Wait 60 seconds before retrying the request correctly instructs to wait 60 seconds before retrying, which follows the server's guidance.Final Answer:
Wait 60 seconds before retrying the request -> Option AQuick Check:
Retry-After: 60 means wait 60 seconds [OK]
- Retrying immediately ignoring Retry-After
- Assuming Retry-After is in milliseconds
- Treating Retry-After as a permanent failure
Identify the error in this HTTP response header snippet:
HTTP/1.1 429 Too Many Requests Retry-After: "30 seconds"
Solution
Step 1: Check Retry-After header format
The Retry-After header must be either an integer number of seconds or a valid HTTP-date string without quotes or extra text.Step 2: Identify the error in the given header
The value "30 seconds" is quoted and includes text, which is invalid syntax.Final Answer:
Retry-After value should not be quoted or include text -> Option BQuick Check:
Retry-After must be seconds or date, no quotes/text [OK]
- Adding quotes around Retry-After value
- Including descriptive text in Retry-After
- Confusing header case sensitivity
A server wants to tell clients to retry after 2 minutes using the Retry-After header. Which is the best way to set this header to ensure compatibility?
Solution
Step 1: Understand Retry-After header formats
Retry-After accepts either an integer number of seconds or a valid HTTP-date string.Step 2: Evaluate options for compatibility
Retry-After: 120 uses integer seconds (120) which is simple and widely supported. Retry-After: "120 seconds" incorrectly quotes and adds text. Retry-After: Wed, 21 Oct 2030 07:28:00 GMT (current time + 2 minutes) uses a date but must be exact and updated dynamically, which is complex. Retry-After: After 2 minutes is invalid text.Final Answer:
Retry-After: 120 -> Option DQuick Check:
Use seconds as integer for simple Retry-After [OK]
- Adding quotes or text to seconds value
- Using a fixed date without updating
- Writing natural language instead of valid format
