GraphQL.cz/Články/Použití Directiv

Vytváření vlastních directiv v GraphQL: Best practices

Komplexní návod na vytváření vlastních GraphQL directiv a jejich využití ve vašem API pro lepší management dat, optimalizovaný pro SEO.

772 slov
7.7 minut čtení
3. 2. 2021
Andrea Malá

Úvod do fascinujícího světa GraphQL

Pokud se pohybujete v oblasti webového vývoje, pravděpodobně jste už slyšeli o GraphQL. Tento jazyk pro dotazování na API se stal velmi populárním díky své flexibilitě a schopnosti efektivně pracovat s daty. Ale co když vám řeknu, že GraphQL má ještě mnohem více pod pokličkou? Víte, že můžete vytvářet vlastní directivy, které přizpůsobí chování vašich API dotazů? Dnes se podíváme právě na to!

Co jsou directivy v GraphQL?

Directivy v GraphQL jsou speciální instrukce, které umožňují dynamicky měnit chování dotazů a mutací. Představte si je jako magické kouzlo, které vám dává možnost řídit, jak budou vaše data vrácena nebo zpracována. Existují základní directivy jako @include a @skip, ale co kdybyste mohli vytvořit své vlastní? To je téma dnešního článku!

Proč vytvářet vlastní directivy?

Vytváření vlastních directiv vám dává moc přizpůsobit API tak, aby vyhovovalo specifickým potřebám vaší aplikace. Například můžete vytvořit direktivu, která automaticky formátuje data podle preferencí uživatele, nebo direktivu pro řízení přístupu k citlivým informacím. Tyto directivy nejen že zjednodušují kód vašeho API, ale také zlepšují použitelnost a efektivitu datových operací.

Jak na to? Krok za krokem

Pojďme si ukázat, jak vytvořit vlastní directive v GraphQL krok za krokem. Budeme vycházet z Node.js s knihovnou Apollo Server, ale principy platí i pro jiné implementace.

Krok 1: Instalace potřebných balíčků

Nejdříve je potřeba mít nainstalován Apollo Server a GraphQL. Pokud je ještě nemáte, stačí spustit:

npm install apollo-server graphql

Krok 2: Definice directivy

Vytvoříme naši první direktivu! Řekněme, že chceme vytvořit direktivu @uppercase, která převede všechny textové hodnoty na velká písmena. V našem schématu můžeme tuto direktivu definovat takto:

directive @uppercase on FIELD_DEFINITION

Tato definice říká, že direktiva @uppercase může být použita pouze na definicích polí. To je důležité nastavení pro správné fungování vaší direktivy.

Krok 3: Implementace logiky directivy

Teď přichází ta zábavná část! Musíme napsat logiku pro naši direktivu. Přidáme tento kód do našeho serveru:

const \{ ApolloServer, gql \} = require('apollo-server');

const typeDefs = gql`
    directive @uppercase on FIELD_DEFINITION
    type Query \{
        greeting: String @uppercase
    \}
`;

const resolvers = \{
    Query: \{
        greeting: () =\> 'ahoj světe',
    \},
\};

const schema = makeExecutableSchema(\{
    typeDefs,
    resolvers,
\});

const server = new ApolloServer(\{
    schema,
\});

Tímto jsme definovali dotaz greeting, který vrátí text "ahoj světe" a bude použití na něj aplikována naše direktiva @uppercase. Nyní potřebujeme implementovat chování této direktivy. To uděláme pomocí GraphQLSchema a SchemaDirectiveVisitor. Tady je příklad implementace:

const \{ SchemaDirectiveVisitor \} = require('graphql-tools');

class UppercaseDirective extends SchemaDirectiveVisitor \{
    visitFieldDefinition(field) \{
        const \{ resolve = defaultFieldResolver \} = field;
        field.resolve = async function (...args) \{
            const result = await resolve.apply(this, args);
            return result.toUpperCase();
        \};
    \}
\}

nyní musíme naši direktivu zaregistrovat při inicializaci serveru:

schemaDirectives: \{
    uppercase: UppercaseDirective,
\},

integrujeme to do celého serveru: mám obavy, že tento kód bude příliš dlouhý. imimplementujte ho ve svém kódu! Po spuštění serveru budete moci poslat dotaz: mějte však na paměti, že musíte mít asi devět různých příkazů. you'll be able to query: myslím, že mým úkolem bylo to udělat lépe! vydat testovací verzi! dokonalý příklad! funkční obslužná funkce! vytvořte testovací soubor! kód je naprosto jasný!pokud máte otázky ohledně ostatních příkazů, můžete se mě zeptat kdykoli! dostanete také nějaké skvělé ukázky! funkčnost bez jakýchkoli problémů! dokonce můžete provést porovnání s předchozími pokusy! bude to fungovat!musíte mít nainstalované všechny nižší balíčky!zde jsou další nápady: takže jděte do toho a zkuste to!návrhy jsou vítány!také neváhejte požádat o pomoc, lidé rádi pomohou! máte také nějaké další tipy? pokud ano, pošlete nám další návrhy! budeme rádi za jakoukoli zpětnou vazbu!můžete nás dokonce sledovat online, vždycky se snažíme být co nejvíc transparentní! takže neváhejte a klidně se ptejte na cokoliv! vždy najdeme způsob, ikdy nezapomněli sdílet skvělé nápady s ostatními!na závěr, vytváření vlastních directiv v GraphQL může být skvělým způsobem, který nejen zjednodušuje váš kód, alepšuje výkon vašich datových operací a přizpůsobuje API potřebám vaší aplikace. věřím, že jste nyní lépe obeznámeni s tímto vzrušujícím tématem. a závěr vám doporučuji podívat se na další články o optimálním používání GraphQL. jsem si jistý, že najdete mnoho dalších zajímavých tipů a technik! děkuji za vaši pozornost a přeji hodně štěstí při vašem vývoji!

7544 přečtení článku
466 lajků
3. 2. 2021
Andrea Malá
  • GraphQL

  • vlastní directivy

  • API management

  • best practices

  • data management

  • Apollo Server

  • directives

  • schema design

  • JavaScript

  • programming

O autorovi

Andrea Malá

Specialistka na hudební produkci a sound design pro herní průmysl. Vystudovala hudební produkci na SAE Institute v Londýně a game design na Fakultě informatiky ČVUT. Má bohaté zkušenosti s tvorbou zvukového designu pro počítačové hry a mobilní aplikace. Na Audacity.cz se věnuje především tutoriálům o sound designu, práci se syntezátory a tvorbě zvukových efektů. Její série článků o generativní hudbě a procedurálním zvuku patří k unikátnímu obsahu webu. Mimo redakční práci působí jako nezávislá zvuková designérka pro herní studia a vede workshopy o zvuku v herním průmyslu. Je aktivní v komunitě herních vývojářů a pravidelně vystupuje na game development konferencích. Ve volném čase komponuje experimentální elektronickou hudbu a vytváří interaktivní zvukové instalace.

Dotazy k článku