Mtego Katika Mafunzo ya Backend

Mafunzo yanakuelekeza mchakato rahisi. Pokea webhook. Sasisha kanzi data. Rudisha 200 OK.

Code yako inafanya kazi wakati wa majaribio. Unaipandisha kwenye production. Kisha unaona rekodi zinazojirudia kwenye kanzi data yako. Watumiaji wanapewa salio mara mbili. Ingizo za data zinaongezeka kwa wingi.

Mafunzo hupuuza uhalisia wa hitilafu za mtandao.

The Problem: Unreliable Networks Mitandao hukwama. Seva yako inaweza kuchakata data kwa polepole. Hitilafu ya DNS inaweza kuzuia jibu lako la 200 OK kufikia mtumaji.

Huduma inapokosa uthibitisho wako, inajaribu tena. Inatuma webhook ile ile tena. Ikiwa code yako inakubali kila ombi, unaunda rekodi zinazojirudia.

The Solution: Idempotency Idempotency inamaanisha kufanya ombi nyingi zinazofanana kuwa na matokeo sawa na ombi moja tu.

Fikiria kitufe cha lifti. Kubonyeza kitufe cha ghorofa ya 5 mara moja kunaambia lifti inapoenda. Kubonyeza mara kumi hakutumii lifti ghorofa ya 50. Matokeo yanabaki vilevile.

Webhook yako lazima ifanye kazi kama kitufe hicho.

How to Fix It Fuata hatua hizi ili kujenga webhooks salama:

  • Tafuta ID ya kipekee ya tukio (event).
  • Angalia kwenye kanzi data yako kwa ajili ya ID hiyo kabla ya kufanya jambo lolote.
  • Ikiwa ID ipo, acha. Rudisha 200 OK ili mtumaji aache kujaribu tena.
  • Ikiwa ID ni mpya, chakata data.
  • Hifadhi ID ya tukio kwenye kanzi data yako mara moja.

Example Logic in Node.js:

const eventId = req.body.event_id;

const existingEvent = await db.processedEvents.findUnique({ where: { id: eventId } });

if (existingEvent) { return res.status(200).send('Already processed'); }

await updateUserData(req.body.data); await db.processedEvents.create({ data: { id: eventId } });

return res.status(200).send('Success');

Kujenga mifumo kwa ajili ya hali kamilifu ni rahisi. Kujenga mifumo kwa ajili ya hitilafu ndiyo uhandisi halisi.

Je, umewahi kukumbana na data zinazojirudia kutokana na majaribio ya mara nyingi? Unashughulikiaje idempotency?

Source: https://dev.to/anubhavg23/the-hidden-trap-in-backend-tutorials-why-your-webhooks-are-creating-duplicate-data-and-how-to-fix-dba