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

بدء استخدام GraphQL في Java
الآن، دعونا نستعرض الخطوات اللازمة لإعداد واستخدام GraphQL في تطبيق Java. سنستخدم Spring Boot، وهو إطار عمل شهير لبناء تطبيقات Java، مع بعض مكتبات GraphQL القوية.

الخطوة 1: إعداد مشروع Spring Boot الخاص بك
أولاً، أنشئ مشروع Spring Boot جديد. يمكنك القيام بذلك باستخدام Spring Initializr أو IDE المفضل لديك.
إليك إعداد بسيط باستخدام Spring Initializr:
- انتقل إلى start.spring.io.
- اختر "مشروع Gradle" أو "مشروع Maven".
- أضف التبعيات اللازمة:
- Spring Web
- Spring Boot DevTools
- Spring Data JPA
- H2 Database (للبساطة)
قم بإنشاء المشروع وفك ضغط الملف الذي تم تنزيله. افتحه في IDE الخاص بك.
الخطوة 2: إضافة تبعيات GraphQL
بعد ذلك، أضف تبعيات GraphQL إلى مشروعك. في ملف build.gradle أو pom.xml، قم بإدراج:
// build.gradle
dependencies {
implementation 'com.graphql-java-kickstart:graphql-spring-boot-starter:11.1.0'
implementation 'com.graphql-java-kickstart:graphql-java-tools:11.1.0'
implementation 'com.graphql-java-kickstart:graphiql-spring-boot-starter:11.1.0'
}
أو لمشروع Maven:
<!-- pom.xml -->
<dependencies>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>11.1.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>11.1.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>11.1.0</version>
</dependency>
</dependencies>
الخطوة 3: تعريف مخطط GraphQL الخاص بك
أنشئ مجلدًا باسم graphql في دليل src/main/resources. في هذا المجلد، أنشئ ملفًا باسم schema.graphqls لتعريف مخطط GraphQL الخاص بك. إليك مثال بسيط:
type Query {
getBookById(id: ID!): Book
getAllBooks: [Book]
}
type Book {
id: ID!
title: String
author: String
publishedDate: String
}
الخطوة 4: إنشاء نماذج Java الخاصة بك
أنشئ فئة بسيطة Book في مشروعك:
package com.example.graphql.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String author;
private String publishedDate;
// Getters and Setters
}
الخطوة 5: إعداد المستودعات الخاصة بك
أنشئ واجهة مستودع لكيان Book الخاص بك:
package com.example.graphql.repository;
import com.example.graphql.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
الخطوة 6: إنشاء حلولات GraphQL
الآن، أنشئ حلولاً لاستعلامات GraphQL الخاصة بك. الحلول مسؤولة عن جلب البيانات المحددة في مخطط GraphQL.
package com.example.graphql.resolver;
import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.example.graphql.model.Book;
import com.example.graphql.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class BookResolver implements GraphQLQueryResolver {
@Autowired
private BookRepository bookRepository;
public Book getBookById(Long id) {
return bookRepository.findById(id).orElse(null);
}
public List<Book> getAllBooks() {
return bookRepository.findAll();
}
}
الخطوة 7: اختبار واجهة برمجة التطبيقات GraphQL الخاصة بك
مع إعداد كل شيء، حان الوقت لاختبار واجهة برمجة التطبيقات GraphQL الخاصة بك. قم بتشغيل تطبيق Spring Boot الخاص بك وانتقل إلى http://localhost:8080/graphiql في متصفحك. سوف يفتح هذا واجهة GraphiQL حيث يمكنك اختبار استعلاماتك.
جرّب الاستعلام التالي لاسترداد جميع الكتب:
{
getAllBooks {
id
title
author
publishedDate
}
}
يجب أن ترى قائمة بالكتب التي تم إرجاعها من قاعدة بياناتك.
ميزات GraphQL المتقدمة
الآن بعد أن قمت بإعداد واجهة برمجة التطبيقات GraphQL الأساسية، دعونا نستكشف بعض الميزات المتقدمة لجعل واجهة برمجة التطبيقات الخاصة بك أكثر قوة.
التعديلات
بالإضافة إلى الاستعلامات، يدعم GraphQL التعديلات، التي تسمح للعملاء بتعديل البيانات. أضف ما يلي إلى ملف schema.graphqls الخاص بك:
type Mutation {
createBook(title: String!, author: String!, publishedDate: String!): Book
updateBook(id: ID!, title: String, author: String, publishedDate: String): Book
deleteBook(id: ID!): Boolean
}
ثم، أنشئ حلاً لهذه التعديلات:
package com.example.graphql.resolver;
import com.coxautodev.graphql.tools.GraphQLMutationResolver;
import com.example.graphql.model.Book;
import com.example.graphql.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class BookMutationResolver implements GraphQLMutationResolver {
@Autowired
private BookRepository bookRepository;
public Book createBook(String title, String author, String publishedDate) {
Book book = new Book();
book.setTitle(title);
book.setAuthor(author);
book.setPublishedDate(publishedDate);
return bookRepository.save(book);
}
public Book updateBook(Long id, String title, String author, String publishedDate) {
Book book = bookRepository.findById(id).orElse(null);
if (book != null) {
book.setTitle(title);
book.setAuthor(author);
book.setPublishedDate(publishedDate);
return bookRepository.save(book);
}
return null;
}
public Boolean deleteBook(Long id) {
bookRepository.deleteById(id);
return true;
}
}
معالجة الأخطاء
يعد التعامل مع الأخطاء بشكل سلس أمرًا حيويًا لواجهة برمجة التطبيقات القوية. في GraphQL، تُعاد الأخطاء بتنسيق موحد، مما يجعل من السهل على العملاء فهم ما حدث بشكل خاطئ. يمكنك تخصيص معالجة الأخطاء في تطبيق Spring Boot الخاص بك من خلال إنشاء استثناء مخصص ومعالج.
package com.example.graphql.exception;
import graphql.ErrorType;
import graphql.GraphQLError;
import graphql.language.SourceLocation;
import java.util.List;
public class BookNotFoundException extends RuntimeException implements GraphQLError {
public BookNotFoundException(String message) {
super(message);
}
@Override
public List<SourceLocation> getLocations() {
return null;
}
@Override
public ErrorType getErrorType() {
return ErrorType.DataFetchingException;
}
}
ثم، أنشئ معالجًا لإدارة هذه الاستثناءات:
package com.example.graphql.handler;
import graphql.GraphQLError;
import graphql.servlet.GraphQLErrorHandler;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class CustomGraphQLErrorHandler implements GraphQLErrorHandler {
@Override
public List<GraphQLError> processErrors(List<GraphQLError> errors) {
return errors.stream().map(this::getNested).collect(Collectors.toList());
}
private GraphQLError getNested(GraphQLError error) {
if (error.getExtensions() != null && error.getExtensions().containsKey("nested")) {
return (GraphQLError) error.getExtensions().get("nested");
}
return error;
}
}
فهم الاختلافات: GraphQL Java مقابل GraphQL Spring Boot
قبل الغوص في إمكانيات Apidog، من الضروري فهم الاختلافات بين استخدام GraphQL Java ودمج GraphQL مع Spring Boot.
GraphQL Java
GraphQL Java هو مكتبة أساسية لتنفيذ GraphQL في تطبيقات Java. يوفر الوظائف الأساسية لتعريف المخططات، ومعالجة الاستعلامات، ومعالجة التعديلات. إليك بعض النقاط الرئيسية:
- المرونة: تقدم GraphQL Java مرونة منخفضة المستوى، مما يتيح لك تخصيص كيفية تعريف وحل مخططات وأنواع GraphQL الخاصة بك.
- الإعداد اليدوي: بما أنها مكتبة أساسية، فإن استخدام GraphQL Java يتطلب إعدادًا يدويًا أكثر وكتابة كود تمهيدي. ستحتاج إلى معالجة جوانب مثل تحليل المخططات، وتنفيذ الاستعلامات، وتوصيلها يدويًا.
- التحكم: يوفر تحكمًا دقيقًا في عملية تنفيذ GraphQL، مما يجعله مثاليًا للتنفيذات المعقدة والمخصصة للغاية لـ GraphQL.
GraphQL Spring Boot
GraphQL Spring Boot، من ناحية أخرى، هو إطار عمل ذو رأي يبني فوق GraphQL Java، مما يدمجه بسلاسة مع نظام Spring Boot البيئي. إليك كيف يختلف:
- سهولة الاستخدام: يبسط GraphQL Spring Boot عملية الإعداد من خلال توفير التهيئة التلقائية والقيم الافتراضية المعقولة. يستفيد من نهج "التسمية الافتراضية على التهيئة" في Spring Boot لتقليل الكود التمهيدي.
- تكامل Spring: يتكامل بسلاسة مع مكونات Spring الأخرى مثل Spring Data وSpring Security وSpring Web، مما يجعل من الأسهل بناء واجهات برمجة التطبيقات GraphQL قوية وآمنة.
- تحسين الأدوات: يتضمن الإطار أدوات إضافية مثل GraphiQL وVoyager لاختبار الاستعلامات التفاعلية وتصور المخططات، مما يحسن تجربة المطور.
باختيار GraphQL Spring Boot، يمكنك تسريع التطوير والتركيز أكثر على منطق الأعمال الخاص بك بدلاً من تعقيدات إعداد GraphQL. ومع ذلك، إذا كنت تحتاج إلى تحكم دقيق وترغب في نهج أكثر مباشرة، فإن GraphQL Java هو بديل قوي.
الآن بعد أن أوضحنا الفروق بين هذين النهجين، دعونا نستكشف كيف يمكن أن يعزز Apidog بشكل أكبر عملية تطوير واجهة برمجة التطبيقات GraphQL الخاصة بك.
دمج Apidog مع مشروع GraphQL Java الخاص بك
Apidog هي أداة شاملة لإدارة واجهة برمجة التطبيقات يمكن أن تبسط بشكل كبير عملية تطوير واجهة برمجة التطبيقات الخاصة بك. إليك كيف يمكنك دمج Apidog في مشروع GraphQL Java الخاص بك لتعزيز قدرات إدارة واجهة برمجة التطبيقات الخاصة بك.
الخطوة 1: تنزيل وتثبيت Apidog
أولاً، قم بتنزيل Apidog واتبع تعليمات التثبيت.
الخطوة 2: استيراد مخطط GraphQL الخاص بك
بمجرد تثبيت Apidog، يمكنك استيراد مخطط GraphQL الخاص بك لإدارة وت测试 واجهة برمجة التطبيقات الخاصة بك بشكل أكثر كفاءة. انتقل إلى قسم الاستيراد في Apidog واحمل ملف schema.graphqls الخاص بك.

أدخل استعلامك في مربع الاستعلام في تبويب "تشغيل". يمكنك أيضًا الضغط على زر Fetch Schema اليدوي في مربع الإدخال لتمكين ميزة "إكمال الكود" لتعبيرات الاستعلام، مما يساعد في إدخال بيانات الاستعلام.

الخطوة 3: اختبار وتوثيق واجهة برمجة التطبيقات الخاصة بك
مع استيراد المخطط الخاص بك، يمكنك استخدام Apidog لاختبار استعلاماتك وتعديلاتك، وتوليد الوثائق، وحتى محاكاة الردود. سيساعدك ذلك في ضمان أن واجهة برمجة التطبيقات الخاصة بك تعمل كما هو متوقع وتقديم دليل شامل لمستخدمي واجهة برمجة التطبيقات الخاصة بك.

الخاتمة: احتضان مستقبل تطوير واجهات برمجة التطبيقات
يقدم GraphQL وJava معًا حلًا قويًا لبناء واجهات برمجة التطبيقات الفعالة والمرنة. من خلال اتباع هذا الدليل، لقد تعلمت كيفية إعداد واجهة برمجة تطبيقات GraphQL في Java، وتنفيذ الميزات المتقدمة، وتعزيز عملية تطويرك مع Apidog.
فماذا تنتظر؟ قم بتحميل Apidog مجانًا اليوم وابدأ في بناء الجيل التالي من واجهات برمجة التطبيقات باستخدام GraphQL وJava!
