Nordlet

← Bunúsanna / Míniúcháin

Cad é Idempotentacht? Cén Fáth a dTeastaíonn Í ó APIanna Cuntasaíochta agus Íocaíochta

Conas a chruthaíonn iarratas athchértaithe sonrasc dúbailte, cad a gCinnteoidh eochair idempotentachta, na modhanna teipe ar a gcaithfidh sí dul i ngleik leo, agus conas í a chur i bhfeidhm i gceart.

Tá oibríocht idempotent má bhíonn an éifeacht chéanna aici nuair a dhéantar faoi dhó agus nuair a dhéantar uair amháin í. Tá léamh taifead idempotent ó lik a dúchais. Níl cruthú sonrasc idempotent - glaoigh air faoi dhó agus beidh dhá shonrasc agat, dhá fhéichiúchas, agus custaiméir ag fiafraí cén fáth ar cuireadh bille faoi dhó air.

Tá an bhearna sin tábhachtach toisc go dteipeann ar líonraí ar bhealach sonrach, gránna: éiríonn leis an iarratas, agus cailltear an freagra. Feiceann an cliant teorainn ama (timeout) agus ní féidir idirdhealú a dhéanamh idir "níor tháinig sé riamh" agus "tháinig sé, d'oibrigh sé, cailleadh an freagra". Is é an t-aon rogha sábháilte a fheiceann sé ná triail eile a bhaint as, agus is é an t-athríail sin a chruthaíonn an dúblach.

Cén fáth a ndéanann an chuntasaíocht níos measa é

I most system isnú a bhíonn i ndúblach. I mórchuid na gcóras is núis a bhíonn i ndúblach. I mórleabhar is fadhb charnach é:

  • Caitheann sonrasc dúbailte uimhir ó shraith gan bhearna (gapless sequence), mar sin ní rogha é é a scriosadh - ciallaíonn neamh-athraitheacht go dteastaíonn nóta creidmheasa lena cheartú, ar doiciméad é a fheiceann do chustaiméir.
  • Postálann an dúblach iontrálacha irise, mar sin bíonn an t-ioncam, an CBL agus na féichiúcháin ró-ard go léir go dtí go dtuigeann duine éigin é.
  • Téann sé isteach sa tuairisceán CBL agus, sa Liotuáin, i cláir i.SAF.
  • Má chuir sé tús le híocaíocht, d'ghluais airgead i ndáiríre.

Ní oibríonn "féach le haghaidh dúblach" tampall, toisc go bhfuil dhá shonrasc ar leith go ginearálta don chustaiméir céanna don mhéid céanna ar an lá céanna iomlán gnáth. Ní féidir leis an gcóras rún a bhaint as an ábhar - caithfidh an cliant é a lua.

Conas a oibríonn eochracha idempotentachta

Gineann an cliant eochair uathúil in aghaidh na hoibríochta loighciúla agus seolann sé í leis an iarratas:

POST /v1/sales/invoices/create
Idempotency-Key: 8f14e45f-ea1b-4c2b-9f3a-2d7c1e0b5a91

Cinntíonn an freastalaí ansin:

  1. An chéad iarratas leis an eochair seo - próiseáil mar is gnáth, stóráil an toradh i gcoinne na heochrach.
  2. Triail eile leis an eochair chéanna agus an t-ualach pá céanna - ná athfhorghníomhaigh; tabhair ar ais an freagra stóráilte.
  3. An eochair chéanna, ualach pá difriúil - diúltaigh. Is éard atá san eochair éileamh gurb ionann seo agus an oibríocht chéanna; ciallaíonn corp difriúil nach ea, agus b'fheasaí gan a rá go ciúin ná botún a bheith ann.
  4. Triail eile fad a bhíonn an bunleagan fós ag rith - diúltaigh le earráid in-athdhéanta seachas a bheith ag forghníomhú ag an am céanna.

Is é pointe 4 an ceann a chaillíonn feidhmithe naive. Buailfidh cliant a théann as am ag 5 soicind agus a dhéanann athríail ag 6 le n-a iarratas féin atá ar siúl; gan garda comhthakarthachta, téann an dá cheann ar aghaidh agus faigheann tú an dúblach a raibh an mheicníocht ann lena chosc.

Eochracha a ghiniúint i gceart

Caithfidh an eochair an oibríocht a aithint, ní an iarracht:

  • Ceart: UUID a ghintear uair amháin nuair a chliceálann an t-úsáideoir "eisiúint sonrasc", a athúsáidtear do gach athríail den chliceáil sin.
  • Ceart: eochair chinntitheach a dhíorthaítear ó do fhearann féin - order-1041-invoice.
  • Mícheart: UUID úr in aghaidh an iarratais HTTP. Faigheann gach athríail eochair nua, mar sin is oibríocht nua gach athríail, agus níor chuir tú aon rud i bhfeidhm.
  • Mícheart: hais (hash) den ualach pá. Imbhíonn dhá oibríocht atá comhionann go dlisteanach ansin, agus slogtar an dara ceann go ciúin.

Teastaíonn tréimhse coinneála ó eochracha - fada go leor chun clúdach a thabhairt do fhuinneoga athríail réalaíocha agus do theipeanna cliant, ach ní go deo.

Rud nach réitíonn sé

Cosnaíonn idempotentacht i gcoinne forghníomhú dúbailte den iarratas céanna. Ní chosnaíonn sé i gcoinne:

  • Dhá úsáideoir éagsúla ag cruthú an sonrasc céanna ó sheisiúin éagsúla - fadhb rialacháin ghnó í sin, a réitítear le srianta uathúlachta amhail sonrasc amháin in aghaidh an ordaithe.
  • Dúblaigh loighciúla le eochracha éagsúla.
  • Neamh-chinntitheacht taobh istigh den oibríocht - má ghineann an láimhseálaí stampa ama nó uimhir, gabhann an freagra stóráilte an chéad cheann, gurb é sin an t-iompar a bhfuil súil leis ach is fiú é a thuiscint.

Péireálann sé le srianta bunachar sonraí, seachas iad a ionadú. Úsáideann mórleabhar Nordlet an dá rud: stopann eochracha idempotentachta iarratais athchértaithe, agus stopann innéacsanna uathúla baisceanna socraithe dúbailte in aghaidh an ID íocaíochta, sonrasc ceannaigh dúbailte in aghaidh an tsoláthraí agus uimhir dhoiciméid, agus rith dímheasa dúbailte in aghaidh an tsócmhainne agus na tréimhse.

Conas a chuireann Nordlet i bhfeidhm é

Seol ceanntásc Idempotency-Key ar aon iarratas a athraíonn stát - teaghrán neamh-fholamh de 255 guta ar a mhéad.

Forghníomhaíonn an chéad iarratas le eochair tugtha agus stóráiltear a thoradh. Tugann athríail leis an eochair chéanna agus an t-ualach pá céanna an freagra stóráilte ar ais gan athfhorghníomhú, ionas go gcruthaítear an sonrasc go díreach uair amháin is cuma cé mhéad uair a athdhéantar an glao.

Tá dhá mhodh teipe sainráite seachas a bheith ciúin:

  • An eochair chéanna, ualach pá difriúil → diúltaití: "Idempotency-Key was already used with a different request payload." Gabhann sé seo an cás contúirteach go dlisteanach ina n-athúsáideann cliant eochair agus é ag athrú an mhéid.
  • An eochair chéanna, an bunleagan fós ar siúl → diúltaíodh mar rud in-athdhéanta: "A request with this Idempotency-Key is still being processed, retry shortly." Gan aon dhúbailt-fhorghníomhú comhthakarthach.

Tá eochracha scóipte in aghaidh na kcuideachta, mar sin ní imbhíonn beirt tionónta a ghineann an UUID céanna riamh.

Ritheann an ráthaíocht chomhlántach sa treo eile. Is é atá i seachadadh greilleán (webhook) ná ar a laghad uair amháin, rud a chiallaíonn go bhfaighidh d'fhoirceann (endpoint) an t-imeacht céanna faoi dhó ó am go ham - tar éis teorainn ama inar éirigh le seachadadh i ndáiríre, nó ar athsheachadadh. Tá ID ag gach imeacht, agus ba chóir do do láimhseálaí IDanna a phróiseáiltear a thaifeadadh agus neamhaird a thabhairt ar athrá. Is maoin í idempotentacht a theastaíonn ó dhá taobh comhtháthaithe; clúdaíonn an treoir um choinbhinsiúin API taobh an iarratais go mion.

FAQ

Cad é eochair idempotentachta?

Aitheantóir a ghineann an cliant a seoltar le iarratas a ligeann don fhreastalaí athríail den oibríocht loighciúil chéanna a aithint. Forghníomhaíonn an chéad iarratas; tugann athríail leis an eochair chéanna an toradh stóráilte ar ais seachas a bheith ag forghníomhú arís.

Cén fáth a dteastaíonn idempotentacht ó APIanna cuntasaíochta?

Toisc go gcruthaíonn scríbhinn dhúbailte doiciméad fíor le fíor-chınınti - an dara sonrasc ag caitheamh uimhir shevensúil, ag postáil chuig an mmórleabhar, agus ag dul isteach i dtuairisceán CBL. Murab ionann agus léamh dúbailte, ní féidir é a scriosadh go simplí; caithfear é a cheartú le nóta creidmheasa.

An cheart dom eochair nua a ghiniúint do gach athríail?

Ní hea - scriosann sin an mheicníocht go hiomlán. Gin eochair amháin in aghaidh na hoibríochta loighciúla agus athúsáid í do gach athríail den oibríocht sin. Ciallaíonn eochair nua in aghaidh na hiarrachta go gcaitear le gach iarracht mar oibríocht nua.

Cad a tharlaíonn má athúsáidim eochair le ualach pá difriúil?

Diúltaítear don iarratas. Dearbhaíonn an eochair gurb ionann seo agus an oibríocht chéanna, mar sin ciallaíonn corp athraithe go bhfuil rud éigin mícheart - is dóichí gur botún athúsáide eochrach atá ar an gcliant. B'fheasaí gan a rá an toradh roimhe sin go ciúin.

An gcosnaíonn idempotentacht ar gach dúblach?

Ní hea. Coscann sé forghníomhú dúbailte den iarratas céanna. Tá dhá úsáideoir éagsúla tar éis an sonrasc céanna a chruthú go neamhspleách tar éis dhá iarratas éagsúla a dhéanamh, ar fadhb rialacháin ghnó í sin do shrianta uathúlachta, ní rud a fhéadann eochair idempotentachta a fheiceáil.