GraphQL.cz/Články/Error handling v GraphQL

Účinné vzory pro zpracování vícero chybových stavů v jednom GraphQL dotazu

Objevte, jak efektivně spravovat vícero chybných stavů v rámci jednoho GraphQL dotazu a optimalizujte tak uživatelskou zkušenost a výkon vaší aplikace.

789 slov
7.9 minut čtení
5. 7. 2022
Lucie Kovářová

Úvod: Proč se zabývat chybovými stavy v GraphQL?
Představte si situaci: uživatel vašeho webu klikne na tlačítko pro načtení dat. Očekává, že vše poběží jako na drátkách. Ale ouha! Zatímco jedna část dotazu se načítá bez problémů, jiná selhává. Jak tohle řešit? Chybové stavy jsou součástí každého vývojářského života, a pokud používáte GraphQL, musíte být připraveni na to, jak se s nimi vypořádat efektivně. V tomto článku se zaměříme na účinné vzory pro zpracování vícero chybových stavů v jednom GraphQL dotazu.

Proč je důležité správně spravovat chyby?
Správa chyb je klíčová pro uživatelskou zkušenost a stabilitu aplikace. Když se s chybami správně zachází, uživatelé se cítí lépe, i když něco nefunguje podle plánu. Místo toho, aby se obávali technických problémů, mohou dostávat smysluplné zprávy o tom, co se pokazilo a jak to mohou vyřešit. V rámci GraphQL je důležité si uvědomit, že ne všechny chyby jsou stejné; některé mohou být kritické pro funkcionalitu aplikace, zatímco jiné mohou být méně závažné.

Jak funguje GraphQL?
Než se ponoříme do samotného zpracování chyb, pojďme si shrnout základy GraphQL. Jedná se o dotazovací jazyk pro API, který vám umožňuje získat přesně ta data, která potřebujete. Na rozdíl od REST API, kde získáváte předem definované odpovědi z různých koncových bodů, GraphQL vám umožňuje specifikovat strukturu požadovaných dat ve vašich dotazech. Tato flexibilita však přináší také výzvy v podobě zpracování více potenciálních chybových stavů.

Zpracování vícero chybových stavů: Vzory a strategie
Když máte více poddotazů v jednom GraphQL dotazu, je nezbytné mít strategii pro efektivní zpracování chyb. Zde jsou některé osvědčené vzory:

  1. Jednotné chybové zprávy:
    Místo toho, abyste vraceli různé kódy chyby pro různé stavy, můžete zavést jednotný formát chybových zpráv. Například můžete vrátit objekt s polem errors, které obsahuje seznam všech chybových stavů a jejich popis.

    \{
      "data": null,
      "errors": [
        \{ "message": "Chyba při načítání uživatele", "code": "USER_NOT_FOUND" \},
        \{ "message": "Chyba při načítání produktů", "code": "PRODUCTS_NOT_AVAILABLE" \}
      ]
    \}
    
  2. Dynamické rozhodování:
    Když dostanete odpověď s více chybami, měli byste zahrnout logiku do svého klienta nebo serveru, která rozhodne o nejlepším způsobu reakce na tyto chyby. Například můžete nabídnout alternativní akce nebo doporučení na základě specifických kódů chyb.

  3. Zacházení s kritickými a nekritickými chybami:
    Rozlišujte mezi kritickými a nekritickými chybami. Kritické chyby by měly zastavit další zpracování (např. když nemáte uživatelská data), zatímco nekritické chyby mohou být zaznamenány a aplikace může pokračovat (např. chyba při načítání obrázků).

  4. Logování chyb:
    Pro lepší sledování byste měli implementovat robustní mechanismus logování chyb na serverové straně. To vám pomůže identifikovat vzory a často se opakující problémy.

  5. Testování a validace:
    Pravidelným testováním vašich API dotazů můžete zachytit možné chyby dříve, než dorazí k uživateli. Využijte nástroje jako Jest nebo Mocha pro testování vaší logiky zpracování chyb.

  6. Dokumentace:
    Nezapomínejte na důležitost kvalitní dokumentace API. Pokud vaši uživatelé vědí, jaké chyby mohou nastat a co je způsobuje, budou mít snazší úkol při jejich řešení.

Příklady z praxe
Pojďme se podívat na konkrétní příklad: Uživatel provádí dotaz na získání detailu produktu a zároveň seznam recenzí produktu:

query GetProductDetails($id: ID!) \{
  product(id: $id) \{
    id
    name
    reviews \{
      id
      content
    \}
  \}
\}

Pokud produkt existuje, ale nejsou dostupné žádné recenze, vrátíme:

\{
  "data": \{
    "product": \{
      "id": "1",
      "name": "Úžasný produkt",
      "reviews": []
    \}
  \},
  "errors": [
    \{"message": "Žádné recenze nebyly nalezeny", "code": "NO_REVIEWS"\}
  ]
\}

zatímco pokud produkt neexistuje:

\{
  "data": null,
  "errors": [
    \{"message": "Produkt nenalezen", "code": "PRODUCT_NOT_FOUND"\}
  ]
\}

a nakonec kombinovaná odpověď: můžete v jeden moment vrátit jak produktové informace s prázdným seznamem recenzí i upozornění na nenalezený produkt:
dotazy: lze vyzkoušet různé kombinace a zjistit tak dopad různých chybových stavů. vždy je dobré zákazníkům poskytnout co nejvíce informací. v souvislosti s řízením projektů a správy problémů. a tímto způsobem můžeme významně zvýšit kvalitu uživatelské zkušenosti. hlavně pokud budeme mít stále na paměti komplexnost našich dotazů. ať nám poskytují takové vzory. budeme schopni lépe zvládat situace. o které se na první pohled může zdát jako beznadějné. v našem systému. v prostoru jako je GraphQL. vždy končíme otázkou – co dál? takže neváhejte si přečíst další naše články o optimalizaci GraphQL? a dalších pokročilých technikách! inspirovat se můžete například u tématu jak využít fragmenty v GraphQL nebo jak efektivně upravit schema!

11741 přečtení článku
220 lajků
5. 7. 2022
Lucie Kovářová
  • GraphQL

  • chybové stavy

  • API

  • uživatelská zkušenost

  • správa chyb

  • optimalizace dotazů

  • testování API

  • zpracování chyb

O autorovi

Lucie Kovářová

Cloud specialistka s 9 letou praxí v oblasti serverless architektury. Absolventka VUT Brno

Dotazy k článku