0Pricing
GraphQL APIs with Spring Boot · Ders

Özel Yönergeler Oluşturma

GraphQL alanlarınıza özel mantık, doğrulama veya dönüştürme eklemek için kendi şema yönergelerinizi oluşturun.

Özel Yönergeler Oluşturma, CoddyKit'te ücretsiz bir GraphQL APIs with Spring Boot dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, GraphQL APIs with Spring Boot öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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.

Sıkça Sorulan Sorular

“Özel Yönergeler Oluşturma” dersi ücretsiz mi?

Evet — “Özel Yönergeler Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve GraphQL APIs with Spring Boot kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

“Özel Yönergeler Oluşturma” dersinde ne öğreneceğim?

GraphQL alanlarınıza özel mantık, doğrulama veya dönüştürme eklemek için kendi şema yönergelerinizi oluşturun. GraphQL APIs with Spring Boot ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

GraphQL APIs with Spring Boot öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te GraphQL APIs with Spring Boot, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Özel Yönergeler Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu GraphQL APIs with Spring Boot dersinde kod yazıp çalıştırabilir miyim?

Evet. Her GraphQL APIs with Spring Boot dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Özel Yönergeler Oluşturma
  2. Şema Birleştirmenin Temelleri
  3. Birden Çok GraphQL Şemasını Birleştirme
  4. Tür Genişletmeleriyle Şema Modülerleştirme
← GraphQL APIs with Spring Boot Sayfasına Dön