بناء Directives مخصصة
أنشئ schema directives الخاصة بك لإضافة منطق مخصص أو تحقق أو تحويل إلى حقول GraphQL.
بناء Directives مخصصة درس مجاني في GraphQL APIs with Spring Boot على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في GraphQL APIs with Spring Boot، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة GraphQL APIs with Spring Boot 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
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 | FIELDUnderstanding 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_DEFINITIONWiring 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
@logexample.
Custom directives are powerful for adding reusable, cross-cutting concerns to your API.
تعلم GraphQL APIs with Spring Boot مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 12
- الدروس
- 48
الأسئلة الشائعة
هل درس «بناء Directives مخصصة» مجاني؟
نعم — نص درس «بناء Directives مخصصة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة GraphQL APIs with Spring Boot، انتقل إلى CoddyKit PRO. تتضمن دورة GraphQL APIs with Spring Boot 4 دروس في المجموع.
ماذا ستتعلم في «بناء Directives مخصصة»؟
أنشئ schema directives الخاصة بك لإضافة منطق مخصص أو تحقق أو تحويل إلى حقول GraphQL. تتمرن على GraphQL APIs with Spring Boot مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ GraphQL APIs with Spring Boot؟
لا تُشترط خبرة سابقة. GraphQL APIs with Spring Boot على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بناء Directives مخصصة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس GraphQL APIs with Spring Boot هذا؟
نعم. كل درس في GraphQL APIs with Spring Boot يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بناء Directives مخصصة
- أساسيات Schema Stitching
- دمج مخططات GraphQL متعددة
- تجزئة المخطط باستخدام امتدادات الأنواع