Hitilafu za API na maana yake
Maana ya kawaida ya kila hali ya HTTP kutoka kwa API ya Didit - 401 na 403 kuhusu funguo na ruhusa, matatizo ya salio ya aina ya 402, mipaka ya kasi ya 429, na jinsi ya kusoma maudhui ya hitilafu.
Soma maudhui ya jibu. Hitilafu za Didit hubeba ujumbe na mara nyingi msimbo wa maelezo unaotaja tatizo halisi - hali peke yake mara chache inatosha. 401 inahusu ufunguo, 403 ni ruhusa au mazingira, 429 ni kikomo cha kasi, na hitilafu ya salio ni suala la krediti, si la msimbo.
#Soma maudhui kwanza
Hali ya HTTP inakuambia aina ya tatizo. Maudhui yanakuambia kilichotokea. Karibu kila saa ya utatuzi inayoweza kuepukika katika muunganisho wa API hupotea kwa kubashiri kutokana na msimbo wa hali, wakati jibu lilikuwa kwenye maudhui yaliyopuuzwa.

- Ufunguo uliozimwa au wa programu isiyo sahihi ndiyo sababu ya kawaida ya 401.
- Last used inathibitisha kama ufunguo unaofikiri unatuma ndio unaofika.
- Badilisha siri hii ikiwa ufunguo huenda umevuja - 401 ni bora kuliko uvunjaji wa usalama.
Rekodi maudhui kamili ya hitilafu - hali, vichwa (headers), na payload - kwa kila ombi lililoshindwa, katika kila mazingira. Utayahitaji, na ni vigumu zaidi kuyarejesha baadaye.
#Maana ya kawaida ya kila hali
| Hali | Sababu ya kawaida |
|---|---|
| 400 | Ombi lenye umbo baya - sehemu ya lazima iliyokosekana, thamani mbaya ya enum, kitu kilichowekwa ndani kwa umbo lisilo sahihi |
| 401 | Uthibitishaji umeshindwa. Kichwa cha x-api-key kimekosekana, kina umbo baya, au si ufunguo halali |
| 403 | Umethibitishwa lakini hairuhusiwi. Mazingira yasiyo sahihi, ruhusa ambayo ufunguo wako hauna, au kipengele ambacho hakijawashwa kwenye akaunti yako |
| 404 | Rasilimali haipo - au ipo chini ya programu tofauti na ile ya ufunguo uliotumia |
| 409 | Mgongano na hali iliyopo, kama hatua ambayo tayari imechukuliwa |
| 422 | Ombi lilikuwa na umbo sahihi lakini thamani hazikubaliki - ni kushindwa kwa uthibitishaji wa data, si la sintaksia |
| 429 | Umefikia kikomo cha kasi. Angalia hapa chini |
| 5xx | Tatizo upande wa Didit. Jaribu tena kwa backoff, na angalia status.didit.me |
#401 dhidi ya 403 - tofauti inayookoa muda
401 inamaanisha ufunguo haukukubaliwa kabisa. Hakikisha unatuma x-api-key, kwamba thamani haina nafasi tupu au alama za nukuu za ziada, na kwamba hukubandika siri ya kusaini webhook badala ya ufunguo wa API - ni vitu viwili tofauti na kosa hili ni la kawaida.
403 inamaanisha ufunguo ni halali lakini ombi hili halijaruhusiwa. Sababu tatu, kwa mpangilio:
- Mazingira yasiyolingana. Sehemu za sandbox pekee (kama
sandbox_scenario) hukataliwa kwenye programu iliyo kwenye uzalishaji, na kinyume chake. Uzalishaji na sandbox ni programu tofauti zenye funguo tofauti. - Ruhusa iliyokosekana. Baadhi ya shughuli zinahitaji ruhusa ambazo ufunguo au wajibu wako hauna. Ikiwa unahitaji haki za kuunda na kusimamia vikao ambazo huna, hilo ni ombi kwa timu ya usaidizi, si urekebishaji wa msimbo.
- Kipengele hakijawashwa. Baadhi ya uwezo hutolewa kwa kila shirika. 403 kwenye kipengele unachoamini unapaswa kuwa nacho inafaa kuulizwa kabla ya kuandika upya ombi.
Hakuna njia iliyojengwa ndani ya kutofautisha ufunguo wa sandbox na ule wa uzalishaji kwa kuutazama tu, hivyo hifadhi kwa majina yanayotofautiana wazi kwenye kidhibiti chako cha siri, na usiruhusu kigezo kimoja cha mazingira kubeba "ufunguo wowote unaotumika sasa". Ufunguo wa uzalishaji ukiwa katika mazingira ya majaribio hutumia krediti halisi.
#404 ambayo inapaswa kuwepo
Ikiwa kikao au workflow inarudisha 404 na una uhakika kuwa inapatikana, jibu la kawaida ni kwamba ipo chini ya programu tofauti na ile ya ufunguo uliotumia kuthibitisha. Rasilimali zimefungiwa kwenye programu yake; ufunguo wa programu A hauwezi kuona vikao vya programu B.
#Hitilafu za salio na krediti
Ombi linaloshindwa kwa sababu hakuna krediti za kutosha si tatizo la msimbo. Workflow ina kipengele cha malipo na salio lako halikitoshi. Hili ndilo ripoti ya kawaida zaidi ya "API imevunjika", na sababu karibu kila mara ni white label, AML, au NFC kwenye workflow iliyotarajiwa kuwa ya bure. Angalia kutatua hitilafu ya "krediti hazitoshi".
#Kikomo cha kasi 429
Mipaka hutumika kwa kila kitambulisho - x-api-key yako, au IP ya mteja wako ikiwa hakuna ufunguo uliotumwa - kikiwa na kihesabu tofauti kwa kila wigo katika dirisha la sekunde 60 linalosogea.
Thamani chaguo-msingi za jumla:
| Wigo | Njia | Kikomo |
|---|---|---|
| Usomaji wa jumla | GET | 600 / dakika |
| Uandishi wa jumla | POST, PATCH, DELETE | 300 / dakika |
Baadhi ya endpoints zenye athari kubwa zina mipaka mikali zaidi pamoja na ile ya jumla, na wigo wa kwanza kufikia kihesabu chake ndio unaorudisha 429. Jedwali kamili: kikomo cha kasi.
Shughulikia 429 kwa exponential backoff na jitter. Mzunguko mkali wa kujaribu tena dhidi ya kikomo cha kasi unazidisha tatizo na unaweza kukufanya ubaki na kikomo bila kikomo.
Kazi za kundi (batch jobs) ndizo chanzo cha kawaida cha 429 - uingizaji wa usiku unaozindua maelfu ya uundaji kwa sekunde chache. Sambaza kazi badala ya kuongeza concurrency mpaka ikome kuleta hitilafu.
#Misimbo ya maelezo ya kina ya kipengele
Zaidi ya hali za HTTP, kila ukaguzi hurudisha misimbo yake ya maelezo kwa matatizo ya kiwango cha mtoa huduma - kwa mfano, muunganisho wa usajili usio na ufikiaji wa bidhaa fulani katika nchi fulani. Unapopata mmoja, msimbo huo unataja hali kwa usahihi, hivyo unukuu unapouliza kuuhusu.
Ikiwa jibu linakosa msimbo wa maelezo ambao ungetarajia kutoka kwenye orodha, inafaa kuripotiwa badala ya kutafuta njia ya kupita - msimbo uliokosekana ni pengo halisi, na unafanya tatizo lile lile kuwa gumu zaidi kwa mtu mwingine.
#Jibu tupu si mafanikio
Ukaguzi unaotegemea mtoa huduma unaorudisha maudhui matupu si sawa na matokeo safi. Chukulia "hakuna data" kama hali yake yenyewe kwenye msimbo wako badala ya kuipangia kama imefaulu - hasa katika uthibitishaji wa hifadhidata na uchunguzi wa pochi, ambapo huduma isiyowekwa tayari na kutolingana halisi vinaweza kufanana kutoka nje.
#Kujaribu njia za hitilafu
Sandbox hulazimisha hitilafu maalum kwa njia inayotabirika, ambayo ndiyo njia pekee ya busara ya kujaribu jinsi unavyoshughulikia hitilafu. Angalia kujaribu kwenye sandbox.
