Tvarkant klaidas su „kai apkrovos ()„ GraphQL “, geriausia praktika sutelkia dėmesį į klaidų valdymą efektyviai„ GraphQL “atsako struktūroje, kartu sprendžiant gilesnius ryšio pakrovimo iššūkius, kuriuos„ pakraunant () gali būti tokiose sistemose kaip „Laravel“. Čia yra išsami geriausios praktikos apžvalga:
supratimas `kai pakraunamas ()` kontekste
„Kai pakraunama ()„ paprastai naudojama „Laravel“ ištekliuose, kad būtų galima kondicionuoti susijusius duomenis tik tuo atveju, jei santykis jau įkeliamas, vengiant nereikalingų duomenų bazių užklausų. Tačiau jis turi apribojimų, susijusių su įdėtais ar gilesniais nei vieno lygio santykiais, kurie gali sukelti N+1 užklausų problemas, jei nebus tvarkomos atidžiai [6]. Tai svarbu, nes klaidos gali atsirasti, kai santykiai nėra įkelti taip, kaip tikėtasi arba kai gilesni santykiai sukelia našumo ar duomenų nuoseklumo problemas.
geriausia klaidų tvarkymo praktika naudojant „whloaded ()` in „Graphql“
1. Klaidas traktuokite kaip duomenų schemos dalį
- Užuot pasikliaudami tik numatytuoju „GraphQL“ klaidų rinkiniu (kuris yra schemas ir gali būti sunku sekti), modeliuokite klaidas kaip „GraphQL“ schemos dalį, naudojant pasirinktinius klaidų tipus ar sąsajas. Pvz., Apibrėžkite „klaidos sąsają“ ir specifinius klaidų tipus, tokius kaip „userRegisterInvaliDInputError“, kurie ją įgyvendina [1] [2].
- Šis metodas leidžia grąžinti klaidas kaip užklausos duomenų dalį, suteikiant galimybę klientams valdyti klaidas kaip struktūrizuotus duomenis, o ne tik pranešimus.
2. Klaidų ir sėkmės tipų atsako sąjungos naudokite atsakymo sąjungas
- Grąžinkite sėkmės ir klaidų tipų sąjungas iš sprendimų, kad klientai galėtų aiškiai atskirti galiojančius duomenis ir klaidų būsenas. Tai verčia tiek pagrindinę, tiek frontendą valdyti klaidas kaip duomenis, pagerindami mastelio keitimą ir aiškumą [2].
- Pvz., Rezultatas gali grąžinti „vartotojo tipą“ arba „vartotojo vartotojo VERDERIDERROR“ „Union“ narį.
3. Pateikite aiškius, veiksmingus klaidų pranešimus
- Įsitikinkite, kad klaidų pranešimai yra aprašomieji ir pamokantys, padėdami klientams suprasti, kas nutiko ir kaip juos išspręsti [8].
- Įtraukite klaidą „pranešimas“, „kelias“ ir „Vietos“ „GraphQL“ klaidos atsakyme, kad nustatytumėte, kur klaida įvyko užklausoje.
4. Metaduomenims naudokite lauką „plėtiniai“
- Pridėkite struktūrizuotus metaduomenis į „GraphQL“ klaidų „plėtinių“ lauką, pavyzdžiui, klaidų kodus, laiko žymes ar sunkumo lygius. Tai padeda klientams programiškai tvarkyti klaidas ir parodyti tinkamus UI atsiliepimus [3] [8].
5. Grakliai tvarkykite dalinius duomenis su klaidomis
- „GraphQL“ leidžia grąžinti dalinius duomenis kartu su klaidomis. Naudokite šią funkciją, kad pateiktumėte kuo daugiau galiojančių duomenų, net jei kai kurios dalys sugenda (pvz., Jei įdėtas santykis nėra įkeltas ar klaidų). Tai pagerina vartotojo patirtį išvengiant visų užklausų gedimų [7] [8].
- „Kai įkeltas ()`, jei gilesnis santykis nėra įkeltas ir negali būti nuskaitytas nesukeliant N+1 problemų, apsvarstykite galimybę grąžinti NULL ar numatytąją vertę su pridedamu klaidos pranešimu.
6. Venkite N+1 užklausų problemų dėl sąlyginio pakrovimo
- Kadangi „pakraunant ()„ veikia tik apie pirmojo lygio santykius, gilesnius santykius reikėtų patikrinti naudojant tokius metodus kaip „santykiai“ ir įkeltas sąlygiškai, naudojant „kai“ arba rankinius patikrinimus, kad būtų išvengta netikėtų užklausų ir klaidų [6].
- Tai apsaugo nuo našumo problemų, kurios gali netiesiogiai sukelti klaidų dėl laiko nutraukimo ar išteklių apribojimų.
7. Centralizuokite klaidų formatavimą ir registravimą
- Norėdami užtikrinti nuoseklius klaidų pranešimus, naudokite serverio pusės klaidų formatavimą (pvz., „Apollo Server“), kad užtikrintumėte nuoseklius klaidų pranešimus ir praleistumėte neskelbtiną informaciją prieš siųsdami klaidas klientams [3].
- Žurnalo klaidos centralizuotai, kad stebėtumėte pasikartojančias problemas ir pagerintumėte patikimumą.
8. Dokumento tikėtinos klaidos aiškiai
- Naudokite schemos dokumentaciją ir pasirinktines direktyvas, kad informuotumėte klientus apie galimas klaidas, su kuriomis jie gali susidurti, ypač atliekant operacijas, susijusias su sąlyginiais ar įdėtais santykiais [8].
Santrauka
Klaidų tvarkymas naudojant „apkrovos ()“ „GraphQL“ apima kruopštaus reliacinių duomenų įkėlimo strategijų sujungimą su tvirta „GraphQL“ klaidų tvarkymu geriausia praktika:
- modelio klaidos kaip jūsų schemos dalis, naudojant pasirinktinius tipus ir sąjungas.
- Pateikite aiškius klaidų pranešimus ir naudokite lauką „plėtiniai“ metaduomenims.
- Grąžinkite dalinius duomenis su klaidomis, kad pagerintumėte atsparumą.
- Venkite N+1 užklausų problemų, sąlygiškai įkeldami gilesnius santykius.
- Centralizuokite klaidų formatavimą ir registravimą.
- Dokumentuokite numatomas klaidas klientų kūrėjams.
Šis metodas užtikrina, kad klaidos, susijusios su sąlyginiu duomenų įkėlimu, naudojant „apkrovos ()“, yra valdomos skaidriai, pagerinant ir pagrindinės patikimumo, ir priekinių klaidų tvarkymo patirtį.
Citatos:
[1] https://testly.io/blog/graphql-error tvarkymas/
[2] https://www.reddit.com/r/graphql/comments/q8u69k/question_graphql_error_handling_best_practices/
[3] https://www.apolrographql.com/docs/apollo-server/data/errors
[4] https://productionReadyGraphql.com/2020-08-01-guide-to-graphql-errors/
[5] https://www.apolrographql.com/docs/react/data/error Handling
[6] https://stackoverflow.com/questions/49965081/how-do-i-use-wenloaded-for-deeper-than-one-one-level-relations
[7] https://itnext.io/the---definitive-guide-to Handling-graphql-errors-e0c58b52b5e1
[8] https://daily.dev/blog/graphql-errors-undundreve-the-basics