Idempotency — same request produces same result (important for retries).
1const redis = require("redis").createClient();23async function idempotentHandler(req, res, next) {4 const idempotencyKey = req.headers["idempotency-key"];56 if (!idempotencyKey) {7 return res.status(400).json({8 error: "Idempotency-Key header required",9 });10 }1112 const key = `idempotency:${idempotencyKey}`;13 const existing = await redis.get(key);1415 if (existing) {16 const parsed = JSON.parse(existing);17 return res.status(parsed.statusCode).json(parsed.body);18 }1920 // Store response21 const originalSend = res.send.bind(res);22 res.send = async (body) => {23 await redis.setEx(key, 86400, JSON.stringify({24 statusCode: res.statusCode,25 body: JSON.parse(body),26 }));27 return originalSend(body);28 };2930 next();31}3233app.post("/payments", idempotentHandler, async (req, res) => {34 const payment = await processPayment(req.body);35 res.json(payment);36});
Key points: