GraphQL APIs with Spring Boot · Aula

Construindo Diretivas Personalizadas

Crie suas próprias diretivas de esquema para adicionar lógica personalizada, validação ou transformação aos campos GraphQL.

Aula 1 de 411 etapas

Construindo Diretivas Personalizadas é uma aula grátis de GraphQL APIs with Spring Boot no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de GraphQL APIs with Spring Boot, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de GraphQL APIs with Spring Boot inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

Directives: Extending GraphQL

GraphQL directives are powerful tools that allow you to add custom behavior or metadata to your schema. You might already know built-in directives like @deprecated or @skip.

Custom directives let you define your own, extending GraphQL's capabilities to fit your unique application needs.

Power of Custom Directives

Custom directives offer several benefits:

  • Reusability: Apply the same logic across multiple fields or types without repeating code.
  • Separation of Concerns: Keep business logic separate from schema definitions.
  • Cross-Cutting Concerns: Easily add features like logging, authorization, or validation to many parts of your API.

Declaring Your Directive

You define a custom directive using the directive keyword in your Schema Definition Language (SDL).

It specifies the directive's name, arguments (optional), and the locations where it can be applied.

directive @log(message: String = "Access") on FIELD_DEFINITION | FIELD

Understanding Directive Locations

The on keyword specifies where your directive can be used. Common locations include:

  • FIELD_DEFINITION: On a field within a type (e.g., User.name).
  • FIELD: On a field in a query document (client-side).
  • ARGUMENT_DEFINITION: On an argument of a field or input field.
  • OBJECT: On an object type.

Implementing Directive Logic

To make your custom directive do something, you need to "wire" it to your Spring Boot application. This involves telling graphql-java how to handle the directive when it encounters it in the schema.

We'll use SchemaDirectiveWiring to intercept and modify field resolution.

Example: The @log Directive

Let's create a @log directive that prints a message whenever a field it's applied to is resolved. This is a great way to see directives in action.

First, our schema definition:

type Query {
  hello: String @log(message: "Hello field accessed")
  goodbye: String
}

directive @log(message: String = "Default Log") on FIELD_DEFINITION

Wiring the @log Directive (Part 1)

In Spring Boot, you implement SchemaDirectiveWiring and register it. This class will contain the logic to execute when the directive is found.

We'll focus on onField to intercept field resolution.

package com.coddykit.directives;

import graphql.schema.DataFetcher;
import graphql.schema.DataFetcherFactories;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.idl.SchemaDirectiveWiring;
import graphql.schema.idl.SchemaDirectiveWiringEnvironment;
import org.springframework.stereotype.Component;

@Component
public class LogDirective implements SchemaDirectiveWiring {

    @Override
    public GraphQLFieldDefinition onField(
            SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> environment) {

        GraphQLFieldDefinition field = environment.getElement();
        String message = (String) environment.getDirective()
                                             .getArgument("message")
                                             .getValue();

        DataFetcher originalDataFetcher = environment.getFieldDataFetcher();
        DataFetcher newDataFetcher = DataFetcherFactories
            .wrapDataFetcher(originalDataFetcher, (dataFetchingEnvironment, value) -> {
                System.out.println("LOG: " + message + " for field '" + field.getName() + "'");
                return value;
            });

        environment.getFieldAndContainer().setDataFetcher(newDataFetcher);
        return field;
    }
}

Wiring the @log Directive (Part 2)

To ensure our LogDirective is picked up, we need a main application and a resolver. Here's how it all fits together, including a simple data fetcher for our hello field.

Notice how RuntimeWiringConfigurer is used to register directive wirings.

package com.coddykit;

import com.coddykit.directives.LogDirective;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.graphql.execution.RuntimeWiringConfigurer;
import org.springframework.stereotype.Controller;
import org.springframework.graphql.data.method.annotation.QueryMapping;

@SpringBootApplication
@Controller
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

    @QueryMapping
    public String hello() {
        return "Hello from CoddyKit!";
    }

    // This bean registers our custom directive wiring
    @Bean
    public RuntimeWiringConfigurer runtimeWiringConfigurer(LogDirective logDirective) {
        return builder -> builder.directive("log", logDirective);
    }
}
// For this application to run, the LogDirective class (from Scene 7)
// must be present in 'com.coddykit.directives' package.

Testing the Directive

With the application running, send a GraphQL query like this:

When you query the hello field, you'll see "LOG: Hello field accessed for field 'hello'" printed in your server console, demonstrating our custom directive in action!

query {
  hello
}

Quick Check: Directive Power

You've seen how custom directives add logic to your GraphQL schema. Which of the following best describes a primary benefit of using custom directives?

Recap: Building Directives

In this lesson, you learned to define and implement custom GraphQL directives in a Spring Boot application. We covered:

  • Declaring directives in SDL with on LOCATION.
  • Implementing directive logic using SchemaDirectiveWiring.
  • Applying a directive to modify field behavior, like our @log example.

Custom directives are powerful for adding reusable, cross-cutting concerns to your API.

Grátis para começar

Aprenda GraphQL APIs with Spring Boot com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
12
Aulas
48

Perguntas Frequentes

A aula “Construindo Diretivas Personalizadas” é grátis?

Sim — o texto completo de “Construindo Diretivas Personalizadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de GraphQL APIs with Spring Boot, atualize para CoddyKit PRO. O curso de GraphQL APIs with Spring Boot inclui 4 aulas no total.

O que vou aprender em “Construindo Diretivas Personalizadas”?

Crie suas próprias diretivas de esquema para adicionar lógica personalizada, validação ou transformação aos campos GraphQL. Você pratica GraphQL APIs with Spring Boot com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar GraphQL APIs with Spring Boot?

Nenhuma experiência prévia é necessária. GraphQL APIs with Spring Boot no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Construindo Diretivas Personalizadas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de GraphQL APIs with Spring Boot?

Sim. Cada aula de GraphQL APIs with Spring Boot inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Construindo Diretivas Personalizadas
  2. Fundamentos da Composição de Esquemas
  3. Mesclando Vários Esquemas GraphQL
  4. Modularização de esquemas com extensões de tipos
← Voltar para GraphQL APIs with Spring Boot