في المشهد المتطور باستمرار لتطوير الويب، GraphQL ظهر كبديل قوي لواجهات برمجة التطبيقات REST التقليدية، حيث يقدم نهجًا أكثر مرونة وكفاءة لجلب البيانات. إذا كنت متشوقًا لاستكشاف هذه التكنولوجيا الإبداعية ودمجها بسلاسة مع Spring، فقد أتيت إلى المكان الصحيح.
مرحبًا بك في البرنامج التعليمي الشامل لـ GraphQL، حيث سنبدأ رحلة لفهم مفاهيم GraphQL وإرشادك خلال عملية البدء مع Spring لـ GraphQL.
ما هو Spring GraphQL وما هي ميزاته الرئيسية
يعتبر Spring GraphQL امتدادًا لإطار العمل الشهير Spring Framework الذي يمكن المطورين من بناء واجهات برمجة تطبيقات قائمة على GraphQL بسلاسة. فهو يجمع بين قوة سهولة تطوير Spring Boot ومرونة وكفاءة GraphQL، مما يجعله خيارًا مثاليًا لتطوير واجهات برمجة التطبيقات الحديثة.
تشمل الميزات الرئيسية لـ Spring GraphQL:
- تطوير مع التركيز على المخطط: مع Spring GraphQL، يمكن للمطورين البدء بتعريف مخطط واجهة برمجة التطبيقات باستخدام لغة تعريف المخططات GraphQL (SDL). يضمن هذا النهج التركيز على المخطط أن يكون تصميم واجهة برمجة التطبيقات واضحًا ومحددًا جيدًا من البداية، مما يعزز عملية تطوير أكثر تنظيمًا وهيكلية.
- جلب البيانات باستخدام المحللين: يبسط Spring GraphQL جلب البيانات من خلال توفير المحللين. يتحمل المحللون مسؤولية جلب البيانات المطلوبة لكل حقل في استعلام GraphQL. يمكن للمطورين تنفيذ المحللين لاسترداد البيانات من مصادر مختلفة مثل قواعد البيانات أو واجهات برمجة التطبيقات الخارجية أو أي مستودع بيانات آخر، مما يتيح مرونة وإعادة استخدام أكبر.
- التكامل مع نظام Spring البيئي: كجزء من عائلة Spring، يندمج Spring GraphQL بسلاسة مع مكونات Spring الأخرى، مثل Spring Data JPA للتفاعلات مع قواعد البيانات وSpring Security للمصادقة والتفويض. يضمن هذا التكامل الوثيق تجربة تطوير سلسة ومتكاملة.
- التحديثات في الوقت الحقيقي مع الاشتراكات: يدعم Spring GraphQL تحديثات البيانات في الوقت الحقيقي من خلال اشتراكات GraphQL. تتيح الاشتراكات للعملاء الاشتراك في أحداث محددة وتلقي تحديثات البيانات في الوقت الحقيقي عند حدوث تلك الأحداث. هذه الميزة مفيدة بشكل خاص لبناء التطبيقات في الوقت الحقيقي، مثل أنظمة الدردشة أو تغذيات البيانات المباشرة.
كيفية إعداد بيئتك؟
قبل أن تبدأ رحلتك مع GraphQL وSpring، تأكد من أن إعدادك جاهز. إليك كيفية إعداد بيئتك لبناء مشروع Spring Boot مع GraphQL:
المتطلبات المسبقة:
- JDK 17: احصل على JDK 17 مثبتًا على نظامك. يمكنك تنزيله من Oracle أو OpenJDK.
- فهم أساسي لـ Spring Boot: تعرف على أساسيات Spring Boot. سيساعدك ذلك حيث تقوم بدمج GraphQL.
إنشاء مشروع Spring Boot:
Spring Initializr: انتقل إلى start.spring.io، نقطة البداية لمشاريع Spring Boot.
أولاً، قدم تفاصيل إعداد المشروع مثل تسمية مشروعك، وتحديد اسم مجموعة بتنسيق المجال العكسي (على سبيل المثال، com.example)، وتحديد اسم الحزمة لشفرتك البرمجية. يمكنك أيضًا تضمين بيانات وصفية مثل وصف ونسخة إذا لزم الأمر.
ثانيًا، أضف الاعتمادات الضرورية. في قسم الاعتمادات، اختر "Spring Web" لتمكين الدعم لإنشاء تطبيقات الويب مع Spring. بالمثل، تحقق من "Spring GraphQL" لتمكين الميزات المتعلقة بـ GraphQL. بمجرد أن تقوم بتكوين مشروعك واختيار الاعتمادات، انقر على زر "توليد" للمتابعة.
استيراد مشروعك إلى IDE الخاص بك:
أولاً، قم استخراج محتويات ملف ZIP للوصول إلى محتوياته. ثانيًا، افتح بيئة التطوير المتكاملة الخاصة بك (IDE)، مثل IntelliJ IDEA. بعد ذلك، استورد المشروع الذي قمت باستخراجه مسبقًا.
هذا كل ما في الأمر! بيئتك جاهزة، لقد أنشأت مشروع Spring Boot، ولديك GraphQL على متن الطائرة. IDE الخاص بك هو ملعبك لمغامرات البرمجة.
كيفية إعداد طبقة البيانات؟
في هذا القسم، سنقوم بإنشاء مثال بسيط، مثل مقهى، لإظهار كيف يمكن أن يعزز GraphQL استرداد البيانات وإدارتها.
مقدمة عن المثال:
تخيل أنك تطور واجهة برمجة تطبيقات لمقهى لإدارة قائمة الطعام والطلبات. لتوضيح ذلك، سنقوم بتعريف نماذج البيانات الأساسية لعناصر القهوة والعملاء، وإعداد خدمة للتعامل مع هذه البيانات.
تعريف نماذج البيانات الأساسية:
لنبدأ بإنشاء نموذجين بيانات بسيطين: Coffee وSize. سيتم تنفيذ هذه النماذج كفئات Java، تحتوي كل منها على خصائص تمثل المعلومات ذات الصلة.
ستحتاج إلى إنشاء فئتين في ملفين مختلفين وفي كل فئة، تحتاج إلى إضافة منشئات، ومجتزئات، ومحددات للخصائص.
public class Coffee {
private int id;
private String name;
private Size size;
// Constructors, getters, setters
}
public class Size {
private int id;
private String name;
// Constructors, getters, setters
}
بعد إنشاء وإضافة هذه الفئات، تحتاج إلى التأكد من أنها موجودة في الحزمة المناسبة داخل مشروع Spring Boot الخاص بك. يجب أن تعكس بنية الحزمة اسم الحزمة الذي قدمته عند توليد المشروع في Spring Initializr.
إليك كيفية إضافة المحددات والمجتزئات والمنشئات لفئة Coffee.java.

إعداد إدارة البيانات:
سنقوم بإنشاء فئة بسيطة CoffeeService لتكون مستودع بيانات في الذاكرة وإدارة بيانات القهوة. للتوضيح، سنقوم بتعبئة هذا المستودع ببضع عناصر قهوة نموذجية.
import java.util.ArrayList;
import java.util.List;
@Component
public class CoffeeService {
private final List<Coffee> coffees = new ArrayList<>();
@PostConstruct
public void init() {
Size smallSize = new Size(1, "Small");
Size mediumSize = new Size(2, "Medium");
Size largeSize = new Size(3, "Large");
coffees.add(new Coffee(1, "Espresso", smallSize));
coffees.add(new Coffee(2, "Latte", mediumSize));
coffees.add(new Coffee(3, "Cappuccino", largeSize));
}
public List<Coffee> getAllCoffees() {
return coffees;
}
public Coffee getCoffeeById(int id) {
return coffees.stream()
.filter(coffee -> coffee.getId() == id)
.findFirst()
.orElse(null);
}
}
تدير فئة CoffeeService بيانات القهوة ذات الصلة، وتتact كخدمة تخزين واسترداد. تقوم بتهيئة بيانات القهوة النموذجية عند إنشائها، مما يوفر طرقًا لاسترداد جميع القهوة أو واحدة محددة حسب ID. يعمل هذا التجريد على تبسيط الوصول إلى البيانات والتلاعب بها، مما يعد البيانات للتفاعل ضمن مخطط GraphQL.

كيفية إنشاء مخطط GraphQL؟
إنشاء ملف باسم schema.graphqls في مجلد src/main/resources وتحديد مخطط GraphQL باستخدام لغة تعريف المخططات (SDL).
type Query {
getAllCoffees: [Coffee!]!
getCoffeeById(id: Int!): Coffee
}
type Coffee {
id: Int!
name: String!
size: Size!
}
type Size {
id: Int!
name: String!
}
إليك كيفية القيام بذلك.

إنشاء جلب البيانات:
يحدد الرمز فئة تسمى CoffeeDataFetcher مسؤولة عن استرداد البيانات لاستعلامات GraphQL. وهي معلمة بـ @Component لتديرها Spring. يقوم الجالب getAllCoffees() باسترداد قائمة من عناصر القهوة باستخدام طريقة coffeeService.getAllCoffees(). يقوم الجالب getCoffeeById() باستخراج ID من معاملات الاستعلام ويستخدمه لاسترداد عنصر قهوة محدد من CoffeeService.
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CoffeeDataFetcher {
@Autowired
private CoffeeService coffeeService;
public DataFetcher<List<Coffee>> getAllCoffees() {
return environment -> coffeeService.getAllCoffees();
}
public DataFetcher<Coffee> getCoffeeById() {
return environment -> {
int id = environment.getArgument("id");
return coffeeService.getCoffeeById(id);
};
}
}
إليك كيفية القيام بذلك.

إنشاء وحدة تحكم GraphQL:
في Spring، توفر وحدات تحكم GraphQL نقاط نهاية للتفاعل مع مخطط GraphQL الخاص بك. تتعامل هذه الوحدات مع الاستعلامات الواردة وتعيد البيانات المقابلة.
import graphql.GraphQL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GraphQLController {
@Autowired
private GraphQL graphQL;
@PostMapping("/graphql")
public Map<String, Object> executeQuery(@RequestBody String query) {
ExecutionResult executionResult = graphQL.execute(query);
return executionResult.toSpecification();
}
}
ستتعامل هذه الوحدة مع استعلامات GraphQL الواردة وتتفاعل مع مخطط GraphQL الخاص بك. توفر نقطة نهاية RESTful في /graphql التي تقبل طلبات POST مع استعلام GraphQL في جسم الطلب. ثم تستخدم الوحدة فصل GraphQL لتنفيذ الاستعلام وتعيد نتيجة التنفيذ كخريطة.
Spring GraphQL هو إطار عمل قوي يمكن المطورين من بناء واجهات برمجة التطبيقات بكفاءة باستخدام لغة استعلام GraphQL. على عكس واجهات برمجة التطبيقات REST التقليدية، حيث تحدد نقاط نهاية متعددة استرجاع البيانات، يمكّن GraphQL العملاء من تحديد البيانات التي يحتاجونها بالضبط في طلب واحد، مما يقلل من الاسترجاع الزائد أو الناقص للبيانات. يستفيد Spring GraphQL من قوة بيئية Spring، مما يجمع بين بساطة Spring Boot مع مرونة GraphQL.
تتضمن العملية تحديد نماذج البيانات الخاصة بك، وإنشاء طبقة خدمة لإدارة البيانات، وتأسيس مخطط بأنواع واستعلامات. يضمن النهج التركيز على المخطط لـ Spring GraphQL تصميمًا واضحًا وعملية تطوير منظمة. يتم تبسيط جلب البيانات من خلال المحللين، ويتم تسهيل التحديثات في الوقت الحقيقي من خلال الاشتراكات.
أدوات اختبار GraphQL:
أصبح GraphQL طريقة شائعة لبناء الواجهات البرمجية، واختبارها أمر حاسم لضمان أنها تعمل بشكل صحيح. تساعد أدوات الاختبار المطورين على التحقق مما إذا كانت واجهات برمجة التطبيقات الخاصة بهم تعمل كما هو مقصود.
واحدة من هذه الأدوات هي Apidog، والتي تقدم مجموعة من الميزات لجعل اختبار واجهات برمجة التطبيقات أسهل. دعونا نلقي نظرة على ما يمكن أن يفعله Apidog ونتحدث عن بعض أدوات الاختبار المفيدة الأخرى لـ GraphQL.

Apidog:
Apidog هو مجموعة أدوات متعددة الاستخدامات تغطي عملية إنشاء واجهات برمجة التطبيقات بالكامل. إنه مثل سكين جيب سويسري للواجهات البرمجية، يساعد في التصميم والاختبار والمزيد. إليك ما يقدمه Apidog:
ما يقدمه Apidog لاختبار GraphQL:
يعمل Apidog بشكل جيد أيضًا لاختبار واجهات برمجة التطبيقات GraphQL. لديه ميزات مثل:
- دعم GraphQL: يمكن لـ Apidog اختبار وتصحيح أخطاء واجهات برمجة التطبيقات GraphQL.
- التلقائية: يمكن أن يقوم بأتمتة المهام والحفاظ على تعريفات واجهات برمجة التطبيقات الخاصة بك متزامنة.
- تكامل قاعدة البيانات: يمكن لـ Apidog الاتصال بقواعد البيانات لتحسين الاختبار.
الخاتمة
مع استمرار تطور واجهات برمجة التطبيقات، فإن دمج GraphQL وSpring GraphQL وأدوات مثل Apidog يعيد تشكيل كيفية إنشاء واجهات برمجة التطبيقات. يمنح هذا المزيج المطورين مزيدًا من التحكم والكفاءة، مما ينتج عنه واجهات برمجة تطبيقات قوية وقابلة للتكيف وعالية الأداء.



