Idempotency means doing the same action many times has the same effect as doing it once. This helps avoid mistakes when requests are repeated.
Idempotency of methods in Rest API
HTTP methods like GET, PUT, DELETE are idempotent by design. POST is usually not idempotent. Example: PUT /items/123 {"name": "book"} This request can be sent many times and the item will be the same after each call.
GET requests only read data and never change it, so they are always idempotent.
PUT replaces or updates a resource fully, so repeating it does not change the result after the first time.
GET /users/1
// This just fetches user data. No matter how many times you do it, the user data stays the same.PUT /users/1 {"name": "Alice"} // This updates user 1's name to Alice. Sending this many times keeps the name as Alice.
DELETE /users/1 // This deletes user 1. Doing it once or multiple times results in user 1 being gone.
POST /users {"name": "Bob"}
// This creates a new user. Sending this multiple times creates multiple users, so POST is not idempotent.This program sends GET and PUT requests twice to the same URL. The GET requests return the same data both times. The PUT requests update the resource with the same data twice, so the result is the same after each call.
import requests url = 'https://jsonplaceholder.typicode.com/posts/1' # GET request - idempotent response1 = requests.get(url) response2 = requests.get(url) print('GET request repeated:') print(response1.json()) print(response2.json()) # PUT request - idempotent put_data = {"title": "foo", "body": "bar", "userId": 1} response3 = requests.put(url, json=put_data) response4 = requests.put(url, json=put_data) print('\nPUT request repeated:') print(response3.json()) print(response4.json())
Idempotency helps make APIs reliable and safe to retry.
Not all HTTP methods are idempotent; know which ones are to avoid bugs.
Sometimes APIs add special headers or tokens to make POST requests idempotent.
Idempotent methods produce the same result no matter how many times they run.
GET, PUT, DELETE are idempotent; POST usually is not.
Using idempotent methods helps avoid duplicate changes and errors.
Practice
idempotent, meaning it can be called multiple times without changing the result beyond the initial application?Solution
Step 1: Understand idempotency in HTTP methods
Idempotent methods produce the same result no matter how many times they are called with the same input.Step 2: Identify which methods are idempotent
GET, PUT, and DELETE are idempotent. POST and PATCH are not because they can create or modify resources differently each time.Final Answer:
PUT -> Option CQuick Check:
PUT is idempotent = B [OK]
- Confusing POST as idempotent
- Thinking PATCH is idempotent
- Assuming CONNECT is idempotent
Solution
Step 1: Identify the HTTP method for deletion
DELETE is the HTTP method used to remove a resource and is idempotent.Step 2: Check curl syntax for DELETE
The correct curl command uses-X DELETEfollowed by the resource URL.Final Answer:
curl -X DELETE https://api.example.com/resource/123 -> Option AQuick Check:
DELETE method syntax = C [OK]
- Using POST instead of DELETE
- Omitting -X flag for method
- Confusing GET with DELETE
PUT /users/42 {"email": "new@example.com"}
PUT /users/42 {"email": "new@example.com"}What is the expected result after these two requests?
Solution
Step 1: Understand PUT idempotency
PUT replaces the resource with the given data. Multiple identical PUT requests do not change the resource after the first update.Step 2: Analyze the two identical PUT requests
The first request updates the email. The second request sends the same data, so no further change occurs.Final Answer:
User's email is updated once and remains the same after second request -> Option BQuick Check:
PUT idempotent means same result = A [OK]
- Assuming PUT creates duplicates
- Thinking second PUT causes error
- Confusing PUT with POST behavior
fetch('https://api.example.com/items/10', { method: 'POST' })
.then(response => console.log('Deleted'));Why is this code incorrect for an idempotent delete operation?
Solution
Step 1: Identify the HTTP method used
The code uses POST to delete a resource, which is incorrect because POST is not idempotent.Step 2: Understand correct method for deletion
DELETE method should be used for idempotent deletion, ensuring repeated calls do not cause unintended effects.Final Answer:
POST is not idempotent and should not be used for deletion -> Option DQuick Check:
DELETE is idempotent, POST is not = A [OK]
- Using POST for delete operations
- Ignoring HTTP method semantics
- Assuming POST is idempotent
Solution
Step 1: Understand idempotent update methods
PUT replaces the entire resource and is idempotent, so repeated calls with the same data do not cause duplicate changes.Step 2: Evaluate options for safe updates
POST is not idempotent, PATCH is not guaranteed idempotent, GET should not modify data. PUT is the best choice for safe, repeatable updates.Final Answer:
Use PUT method to update the entire user profile with the same data each time -> Option AQuick Check:
PUT ensures idempotent updates = D [OK]
- Using POST for updates expecting idempotency
- Assuming PATCH is always idempotent
- Trying to update data with GET
Ready to prove it?
Pass the test and this pattern moves unknown
