GraphQL.cz/Fórum/Jak správně nastavit chyby pro nevalidní data v GraphQL?

Jak správně nastavit chyby pro nevalidní data v GraphQL?

Zajímalo by mě, jak nejlepší způsob, jakým lze v GraphQL zpracovat chyby, které vznikají při nevalidních datech. Mám na mysli situace, kdy uživatelé zadávají špatné nebo chybějící informace a já bych chtěl, aby byla chyba správně zachycena a vrácena zpět jako odpověď. Uvažoval jsem o použití vlastních chybových typů, ale nejsem si jistý, jak je implementovat bez toho, abych přetížil API a způsobil nežádoucí chování. Je lepší mít globální error handler, nebo raději specifické chyby pro jednotlivé typy dotazů? Všiml jsem si, že různé projekty to dělají různě a zajímalo by mě, co funguje nejlépe v praxi. Jaké máte zkušenosti s návrhem schématu pro chyby v GraphQL? Jakou strategii doporučujete pro uživatelské rozhraní, aby se chyby daly jasně pochopit? Myslím si, že je důležité nejen vrátit kód chyby, ale také nějaký popis, který by uživatelům pomohl pochopit, co udělali špatně. A co třeba validace dat na úrovni serveru versus klienta? Kde byste viděli hranici mezi těmito dvěma? Hlavně bych chtěl slyšet vaše názory a tipy na to, jak udělat API uživatelsky přívětivé i při chybách. Předem díky za jakékoli rady!

180 slov
1.8 minut čtení
12. 7. 2023
Dana Němcová

Když řešíš chyby v GraphQL, tak je dobrý mít nějakou jasnou strategii. Já bych šel spíš cestou vlastních chybových typů. Můžeš si definovat vlastní typy jako ValidationError nebo DatabaseError, aby uživatelé věděli, co přesně se pokazilo. Pokud to všechno hodíš do jednoho globálního error handleru, může to být chaos a nebudeš moct říct, co konkrétně selhalo.

Taky je fajn vracet nějaký popis k chybě, ne jen kód. Uživatel by měl vidět, proč mu dotaz neprošel – třeba co přesně zadal blbě. To ti pomůže zlepšit UX a lidi nebudou frustrovaní.

Co se týče validace dat, tak klidně můžeš mít validaci jak na klientovi, tak na serveru. Klient může udělat základní kontrolu, ale server by měl být ten, kdo dělá finální validaci, protože klient je nakonec nedůvěryhodný zdroj.

Takže shrnuto: vlastní typy chyb, jasný popisy a validace na serveru jako konečný arbiter. Udržuj to jednoduchý a srozumitelný.

147 slov
1.5 minut čtení
4. 1. 2024
Bedřich Musil

Takže, pokud jde o chyby v GraphQL, tak doporučuji mít nějakou kombinaci. Můžeš mít globální error handler pro zachycení obecných chyb a pak specifické chyby pro jednotlivé dotazy. Tím pádem to nebudeš mít přetížené, ale zároveň uživatelé dostanou jasné informace, co udělali špatně. Když se něco pokazí, je dobrý vrátit nějaký popis včetně kódu chyby. To pak můžeš snadno zpracovat na frontendu a uživatel tak ví, kde se stala chyba.

Ohledně validace dat – určitě bys měl validaci mít na serveru, protože tam můžeš udělat komplexnější logiku. Klient by měl dělat základní kontrolu (třeba jestli je pole prázdné nebo ne). Hranice mezi tím je asi tam, kde je něco jednoduchého versus složitějšího.

Pro uživatelské rozhraní je dobrý mít jasné hlášky. Když uživatel dostane chybu, měl by mu něco vysvětlit, co měl udělat jinak. Takže spíš než jen "Invalid Input" mu říct "Zadejte platnou e-mailovou adresu" by mohlo být mnohem lepší. To pak zlepší celkovou zkušenost s API. Takže prostě kombinuj globální a specifické chyby a snaž se o jasnou komunikaci s uživateli.

170 slov
1.7 minut čtení
28. 11. 2022
Milada Zajícová

Nastavení chyb v GraphQL může být fakt tricky, protože chceš, aby to uživatelé pochopili. Osobně si myslím, že je dobré mít nějaký mix. Globální error handler ti pomůže chytit většinu chyb, ale specifické chyby pro jednotlivé dotazy můžou být užitečné pro detailnější informace.

Co se týče vlastních chybových typů, tak to určitě doporučuji. Můžeš tím vracet jasnější popis toho, co se stalo. Například když uživatel zadá neplatný e-mail, můžeš vrátit chybu "INVALID_EMAIL" s popisem, proč je to špatně. Tímhle způsobem jim dáš šanci to opravit.

Důležité je taky mít validaci jak na serveru, tak na klientovi. Na klientovi můžeš udělat základní validaci (třeba regex na e-mail), ale server by měl mít vždy poslední slovo. Hranici vidím tak, že klient kontroluje formáty a server ověřuje logiku a integritu dat.

Ohledně uživatelského rozhraní – snaž se vracet co nejvíc informací o chybě. Kód chyby a jasný popis jsou klíčový, aby uživatel věděl, co má dělat dál. Takže jo, klidně experimentuj s tím, co funguje nejlíp ve tvém projektu!

163 slov
1.6 minut čtení
29. 9. 2023
Stanislav Chalupa
GraphQL.cz/Články/Validace dat
Jak efektivně implementovat validaci dat v GraphQL schématechObjevte, jak efektivně validovat vstupní data v GraphQL schématech a minimalizovat tak chyby během API volání.
1000 slov
10 minut čtení
15. 11. 2021
Barbora Němcová
Přečíst článek
Podobné otázky