GraphQL.cz/Fórum/Jak na validaci dat v GraphQL s použitím Zod?

Jak na validaci dat v GraphQL s použitím Zod?

Zdravím všechny, chtěl bych se zeptat, jestli někdo z vás má zkušenosti s validací dat v GraphQL pomocí knihovny Zod. V poslední době jsem narazil na potřebu správně validovat vstupní data pro mé GraphQL API a Zod mi přijde jako zajímavá volba, protože má jednoduchou syntaxi a umožňuje definovat schémata. Mám ale pár otázek. Jak přesně bych měl integrovat Zod do mého GraphQL resolveru? Je nějaký konkrétní postup, jak vytvořit validační schéma a následně zpracovávat potenciální chyby? Jak se to vlastně používá v praxi? Hlavně by mě zajímalo, zda je dobré validovat data přímo v resolvers nebo spíš v middleware. A co třeba asynchronní validace? Podporuje Zod i tuhle funkci, nebo bych měl hledat alternativy? Velice rád bych slyšel vaše názory a tipy, protože chci mít jistotu, že moje API bude robustní a bezpečné. Díky moc za jakékoli rady!

139 slov
1.4 minut čtení
16. 12. 2024
Pavel Horálek

Když chceš používat Zod pro validaci dat v GraphQL, tak si nejdřív vytvoř validační schéma. To se dělá jednoduše, pomocí Zod můžeš definovat různé typy jako string, number, atd. Pak v resolveru prostě zavolej schema.parse(data), kde data jsou vstupní argumenty. Pokud je všechno ok, pokračuješ, jinak chytíš error a můžeš ho nějak zpracovat (třeba vrátit uživateli).

Myslím, že validace přímo v resolveru je fajn pro jednoduché případy. Na složitější věci klidně použij middleware. Zod taky podporuje asynchronní validace, což je super, pokud potřebuješ třeba kontrolovat něco v databázi. Takže se neboj použít Zod, je to fakt užitečný nástroj pro robustnost tvého API.

102 slov
1 minut čtení
12. 9. 2024
Radka Švecová

Integrace Zod do GraphQL resolverů je celkem jednoduchá. Můžeš si vytvořit validační schéma pomocí Zod, třeba takhle: const schema = z.object(\{ name: z.string().min(1), age: z.number().min(0) \});. Pak v resolveru použiješ schema.parse(args.input) na vstupní data. Pokud jsou data špatně, Zod hodí chybu, kterou můžeš zachytit a vrátit klientovi nějaký smysluplný error message.

Co se týká místa validace, obě možnosti mají své výhody. Validace přímo v resolvers ti dává větší kontrolu nad chybami, ale pokud máš víc resolverů a stejnou logiku, může být lepší udělat middleware. Asynchronní validaci Zod podporuje taky, stačí použít schema.parseAsync(), takže pokud potřebuješ třeba ověřit unikátnost v databázi, to jde.

Dohromady bys měl mít robustní API. Hlavně nezapomeň na správné ošetření chyb a jasné zprávy pro uživatele. To zlepší zkušenost s tvým API.

124 slov
1.2 minut čtení
8. 10. 2024
Jindřiška Buchtová

Zod je fakt super volba pro validaci dat v GraphQL. Jak to udělat? Můžeš si vytvořit validační schéma, třeba takhle:

 import \{ z \} from 'zod';

const userSchema = z.object(\{
  name: z.string().min(1),
  email: z.string().email(),
\});

Pak to použiješ v resolvers. Můžeš validaci provádět přímo tam, kde zpracováváš requesty. Když dostaneš data, prostě je projedeš schématem:

async function createUser(parent, args) \{
  try \{
    const validatedData = userSchema.parse(args);
    // Ulož validatedData do DB nebo něco udělej.
  \} catch (error) \{
    throw new Error('Invalid data');
  \}
\}

Když dojde k chybě, tak chytneš výjimku a můžeš poslat uživateli jasnou zprávu. Zod umí i asynchronní validace, takže pokud potřebuješ ověřit něco jako existenci uživatelského jména v DB, tak to uděláš takto:

const asyncSchema = userSchema.refine(async (data) =\> \{
  const exists = await checkIfUserExists(data.email);
  return !exists;
\}, \{
  message: "Email už existuje",
\});

Co se týče middleware vs resolvers, já bych doporučil dělat to v resolvers, protože si tak můžeš lépe přizpůsobit chybové zprávy a logiku pro každý endpoint. Middleware je fajn na globální validace, ale na konkrétní případy je lepší mít vlastní logiku právě v resolveru. Takže shrnutí: Zod je super, validuj buď v resolvers nebo middleware a klidně používej i asynchronní funkce, pokud to potřebuješ.

208 slov
2.1 minut čtení
14. 8. 2024
Zdeněk Burian
GraphQL.cz/Články/Validace dat
Ověření vstupu pomocí Zod a GraphQL: Jednoduchá a efektivní strategieTento článek se zaměřuje na kombinaci knihovny Zod a GraphQL pro ověření vstupu uživatelských dat a přináší jednoduchý návod, jak tuto kombinaci využí...
1000 slov
10 minut čtení
13. 6. 2024
Pavel Novotný
Přečíst článek
Podobné otázky