Idempotent — same result on repeat. Non-idempotent — different results.
Idempotent Operations:
Idempotent:
PUT /users/1 {name: "John"}
Request 1: Update → Success
Request 2: Update → Same result
(Safe to retry)
Non-Idempotent Operations:
Non-Idempotent:
POST /orders {item: "book"}
Request 1: Create Order #1
Request 2: Create Order #2 (duplicate!)
(Not safe to retry)
Key differences: