GraphQL.cz/Články/Validace dat

Jak vykonávat asynchronní validaci dat v GraphQL: Příklady a techniky

Prozkoumejte, jak provést asynchronní validaci vstupních dat v GraphQL a jaké jsou typické scénáře použití této techniky.

694 slov
6.9 minut čtení
20. 6. 2021
Martin Černý

Když se zamýšlíme nad moderním vývojem aplikací, jedním z nejdůležitějších aspektů, na který musíme myslet, je validace dat. Uživatelé často zadávají údaje, které nemusí být vždy správné nebo očekávané. A právě zde se dostáváme k asynchronní validaci v GraphQL – mocnému nástroji, který nám umožňuje zajistit integritu dat při práci s API. V dnešním článku se podíváme na to, jak asynchronní validaci implementovat, proč je důležitá a jaké techniky a příklady můžeme využít.

Co je to asynchronní validace?

Asynchronní validace dat je proces, kdy ověřujeme vstupní data, ale neprovádíme tuto kontrolu synchronně – to znamená, že nezastavujeme zbytek aplikace, dokud není ověření dokončeno. Místo toho můžeme poslat požadavek na server či jinou službu a čekat na odpověď bez blokování běhu kódu. To je obzvlášť užitečné v prostředí s vysokým zatížením nebo při práci s externími API.

Proč používat asynchronní validaci v GraphQL?

Asynchronní validace je v kontextu GraphQL velmi cenná. Může pomoci:

  • Zlepšit uživatelský zážitek: Uživatelé dostanou rychlé odezvy na své akce a nevnímají zpoždění.
  • Zabezpečit integritu dat: Ověřením dat před jejich uložením do databáze můžete předejít chybám.
  • Optimalizovat výkon: Místo čekání na všechna ověření může váš server reagovat rychleji.

Jak provést asynchronní validaci v GraphQL?

1. Použití middleware

Jedním z populárních způsobů, jak implementovat asynchronní validaci v GraphQL, je použití middleware. Middleware vám umožňuje vložit funkce mezi příchozí požadavek a jeho zpracování. Jakmile klient odešle požadavek, middleware může provést asynchronní kontrolu.

Příklad:

const \{ ApolloServer \} = require('apollo-server');
const \{ UserInputError \} = require('apollo-server-errors');

const validateUserData = async (data) =\> \{
  // Asynchronní volání na externí API pro ověření uživatelských dat
  const response = await externalApi.validateUser(data);
  if (!response.valid) \{
    throw new UserInputError('Invalid user data provided.');
  \}
\};

const server = new ApolloServer(\{
  typeDefs,
  resolvers,
  context: async (\{ req \}) =\> \{
    if (req.body && req.body.variables) \{
      await validateUserData(req.body.variables.input);
    \}
  \},
\});

V tomto příkladu middleware volá validateUserData, která provádí asynchronní ověření uživatelských dat předtím, než se spustí samotný resolver.

2. Resolver s asynchronním ověřením

Dalším způsobem, jak provádět asynchronní validaci, je přímé volání ověření uvnitř resolveru. V tomto případě resolver nevrátí výsledek, dokud nedokončí ověření.

Příklad:

const resolvers = \{
  Mutation: \{
    createUser: async (_, \{ input \}) =\> \{
      const isValid = await validateUser(input);
      if (!isValid) \{
        throw new UserInputError('Invalid input!');
      \}
      // Pokračujte s vytvořením uživatele
    \},
  \},
\};

Tato technika vám umožňuje mít plnou kontrolu nad tím, jak a kdy se data ověřují.

3. Využití knihoven pro validaci

Existuje mnoho knihoven pro validaci dat, které mohou usnadnit práci s asynchronními požadavky. Například Joi nebo Yup jsou skvělé pro definici schémat a provádění ověření.

Příklad použití Yup:

const Yup = require('yup');

const userSchema = Yup.object().shape(\{
  email: Yup.string().email().required(),
\});

const resolvers = \{
  Mutation: \{
    createUser: async (_, \{ input \}) =\> \{
      try \{
        await userSchema.validate(input);
      \} catch (error) \{
        throw new UserInputError(error.message);
      \}
      // Pokračujte s vytvořením uživatele
    \},
  \},
\};

v tomto příkladu používáme Yup k definici schématu pro uživatelská data a provádíme asynchronní validaci před uložením do databáze.

Typické scénáře použití asynchronní validace v GraphQL

Asynchronní validace může být užitečná v mnoha různých scénářích:

  • Ověření e-mailové adresy: Před registrací nového uživatele můžete zavolat externí službu pro ověření platnosti e-mailové adresy nebo zjistit, jestli již není registrována.
  • Kontrola dostupnosti uživatelského jména: V případě registrace můžete chtít zjistit, zda dané uživatelské jméno již není obsazené.
  • Ověření tokenů: Při přihlašování uživatele můžete provést asynchronní kontrolu platnosti tokenu či oprávnění. o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
    o-t
16052 přečtení článku
425 lajků
20. 6. 2021
Martin Černý
  • asynchronní validace

  • GraphQL

  • validace dat

  • Apollo Server

  • uživatelská data

O autorovi

Martin Černý

API architekt s 15letou praxí v oboru. Začínal s REST API

Dotazy k článku