☰ Мәзір · Идемпотенттілік
Бастау

Идемпотенттілік

Желі шақырудың ортасында үзілуі мүмкін. Әр жазу операциясын қауіпсіз қайталауға болады, сондықтан қонақ бір чек үшін кэшбэкті ешқашан екі рет алмайды.

Чектер мен келулер: external_id

POST /v1/transactions және POST /v1/visits үшін external_id міндетті: бұл чектің немесе келудің сіздегі id-і. Әр external_id бір мекемеде бір рет қана өтеді. Оны қайта жіберсеңіз, 201 орнына сақталған нәтижемен 200 аласыз, картада ештеңе өзгермейді. Бұл бір тәулікпен шектелмейді, мерзімсіз жұмыс істейді. Сондықтан касса желіден тыс болғаннан кейін бүкіл ауысымды қайта жіберу қауіпсіз.

Басқа жазу операциялары (қатысушыны тіркеу, сыйлық беру, тағам қосу) үшін бірегей мәні бар Idempotency-Key тақырыбын жіберіңіз, мысалы алғашқы әрекетке дейін жасалған UUID. Жауапты 24 сағат сақтаймыз. Сол кілтпен және сол денемен қайталасаңыз, сол жауап Idempotent-Replayed: true тақырыбымен қайтады. Сол кілт басқа денемен келсе, 409 idempotency_key_reused арқылы қабылданбайды.

curl
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 мәнін сақтаңыз. Жаңа мән жаңа операция дегенді білдіреді.
Интеграция бойынша сұрақтар: api@loyaltyfy.io. Бір жұмыс күні ішінде жауап береміз.