☰ Мәзір · Идемпотенттілік
Идемпотенттілік
Желі шақырудың ортасында үзілуі мүмкін. Әр жазу операциясын қауіпсіз қайталауға болады, сондықтан қонақ бір чек үшін кэшбэкті ешқашан екі рет алмайды.
Чектер мен келулер: external_id
POST /v1/transactions және POST /v1/visits үшін external_id міндетті: бұл чектің немесе келудің сіздегі id-і. Әр external_id бір мекемеде бір рет қана өтеді. Оны қайта жіберсеңіз, 201 орнына сақталған нәтижемен 200 аласыз, картада ештеңе өзгермейді. Бұл бір тәулікпен шектелмейді, мерзімсіз жұмыс істейді. Сондықтан касса желіден тыс болғаннан кейін бүкіл ауысымды қайта жіберу қауіпсіз.
Қалғаны: Idempotency-Key
Басқа жазу операциялары (қатысушыны тіркеу, сыйлық беру, тағам қосу) үшін бірегей мәні бар Idempotency-Key тақырыбын жіберіңіз, мысалы алғашқы әрекетке дейін жасалған UUID. Жауапты 24 сағат сақтаймыз. Сол кілтпен және сол денемен қайталасаңыз, сол жауап Idempotent-Replayed: true тақырыбымен қайтады. Сол кілт басқа денемен келсе, 409 idempotency_key_reused арқылы қабылданбайды.
curl https://loyaltyfy.io/api/v1/members \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f6d1c0a-9b0e-4d2b-8e57-enrol-77" \
-d '{ "phone": "+37366791102", "first_name": "Ion", "consent": true }'
# repeat the same call: same body, same status, plus the header
# Idempotent-Replayed: trueҚалай қайталау керек
- Желі қателерінде, тайм-аутта,
429,500,502және503кезінде қайталаңыз. Басқа4xxқайталамаңыз: жауап өзгермейді. - Әр қайталау алдында күтіңіз және күту уақытын біртіндеп ұзартыңыз, мысалы 1, 2, 4, 8 секунд.
- Бір операцияны қайталағанда сол
external_idнемесеIdempotency-Keyмәнін сақтаңыз. Жаңа мән жаңа операция дегенді білдіреді.