بناء واجهات برمجة التطبيقات (APIs) باستخدام GraphQL و Node.js

Amine
28/08/2024

مقدمة

تعتبر GraphQL تقنية متقدمة لبناء واجهات برمجة التطبيقات (APIs) وتقدم بديلًا أكثر مرونة مقارنة بـ REST. باستخدام GraphQL، يمكن للمطورين الاستفسار عن البيانات بشكل أكثر كفاءة ودقة، مما يقلل من عدد الطلبات ويحسن الأداء. في هذا الدرس، سنشرح كيفية بناء واجهات APIs باستخدام GraphQL و Node.js. سنبدأ من الصفر لنغطي كل شيء بدءًا من إعداد البيئة، وإنشاء مخططات (Schemas)، حتى تنفيذ الاستعلامات والمعاملات. هذا الدرس موجه للمطورين الذين لديهم خلفية في Node.js ويرغبون في استخدام GraphQL لبناء APIs مرنة وحديثة.

الأهداف

  1. فهم أساسيات GraphQL وكيفية عملها.
  2. إعداد بيئة Node.js مع GraphQL.
  3. بناء مخططات واستعلامات GraphQL.
  4. تنفيذ معاملات (Mutations) لإدارة البيانات.
  5. اختبار الـ API باستخدام GraphQL Playground.

الجزء الأول: فهم أساسيات GraphQL

1. ما هو GraphQL؟

GraphQL هو لغة استعلام APIs مفتوحة المصدر تم تطويرها من قبل فيسبوك. توفر GraphQL طريقة مرنة للاستعلام عن البيانات، حيث يمكن للمطورين طلب البيانات التي يحتاجونها فقط، مما يقلل من البيانات الزائدة ويزيد من كفاءة الأداء.

2. مقارنة بين GraphQL و REST:

REST: يحتاج المستخدم إلى عدة طلبات للحصول على بيانات من مصادر متعددة.

GraphQL: يمكن للمستخدم الحصول على جميع البيانات المطلوبة من خلال طلب واحد فقط، مما يقلل من عدد الطلبات ويسمح بمرونة أكبر في استرجاع البيانات.

3. مكونات GraphQL الأساسية:

مخططات (Schemas): تحدد أنواع البيانات المتاحة وكيفية استرجاعها.

الاستعلامات (Queries): تحدد البيانات التي يرغب العميل في الحصول عليها.

المعاملات (Mutations): تستخدم لتحديث البيانات أو إدخال بيانات جديدة.

الجزء الثاني: إعداد بيئة Node.js مع GraphQL

1. تثبيت Node.js:

تأكد من تثبيت Node.js على جهازك. يمكنك تنزيله من الموقع الرسمي.

2. إعداد مشروع Node.js:

أنشئ مجلدًا جديدًا للمشروع:

mkdir graphql-api
cd graphql-api

قم بتثبيت الحزم الأساسية:

npm init -y
npm install express express-graphql graphql

3. إنشاء خادم Express مع GraphQL:

أنشئ ملفًا جديدًا index.js:

const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// بناء المخطط
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// تحديد الدوال التنفيذية
const root = {
  hello: () => 'Hello GraphQL!',
};

const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));

app.listen(4000, () => console.log('Server running on http://localhost:4000/graphql'));

قم بتشغيل الخادم:

node index.js

الآن يمكنك زيارة http://localhost:4000/graphql واستخدام واجهة GraphiQL لتجربة الاستعلامات.

الجزء الثالث: بناء مخططات واستعلامات GraphQL

1. إنشاء مخطط معقد:

لنقم بتوسيع المخطط لإنشاء تطبيق يدير قائمة من الكتب:

قم بتعديل المخطط في index.js:

const schema = buildSchema(`
  type Book {
    id: ID!
    title: String!
    author: String!
  }

  type Query {
    books: [Book]
  }
`);

const books = [
  { id: 1, title: '1984', author: 'George Orwell' },
  { id: 2, title: 'The Catcher in the Rye', author: 'J.D. Salinger' }
];

const root = {
  books: () => books,
};

يمكنك الآن الاستعلام عن الكتب المتاحة:

query {
  books {
    id
    title
    author
  }
}

2. إضافة معاملات (Mutations):

المعاملات تُستخدم لتحديث البيانات. لنقم بإضافة معاملة لإدخال كتاب جديد:

قم بتعديل المخطط:

const schema = buildSchema(`
  type Book {
    id: ID!
    title: String!
    author: String!
  }

  type Query {
    books: [Book]
  }

  type Mutation {
    addBook(title: String!, author: String!): Book
  }
`);

let books = [
  { id: 1, title: '1984', author: 'George Orwell' },
  { id: 2, title: 'The Catcher in the Rye', author: 'J.D. Salinger' }
];

const root = {
  books: () => books,
  addBook: ({ title, author }) => {
    const newBook = { id: books.length + 1, title, author };
    books.push(newBook);
    return newBook;
  }
};

لإضافة كتاب جديد باستخدام المعاملة:

mutation {
  addBook(title: "Brave New World", author: "Aldous Huxley") {
    id
    title
    author
  }
}

الجزء الرابع: اختبار الـ API باستخدام GraphQL Playground

1. استخدام GraphiQL:

GraphiQL هي واجهة مستخدم رسومية مضمنة مع express-graphql لتجربة الاستعلامات والمعاملات بسهولة. يمكنك الوصول إليها من خلال /graphql في متصفحك.

2. استخدام أدوات خارجية:

Insomnia و Postman يدعمان GraphQL أيضًا، ويمكن استخدامهما لاختبار الـ API.

GraphQL Playground هو بديل قوي لواجهة GraphiQL مع ميزات إضافية مثل حفظ الاستعلامات وإدارة المشاريع.

خاتمة

من خلال استخدام GraphQL مع Node.js، يمكنك بناء APIs مرنة وسهلة الاستخدام. يوفر GraphQL إمكانيات استعلام دقيقة وتحكم أكبر في البيانات، مما يجعلها اختيارًا مثاليًا للمشاريع الحديثة التي تتطلب أداء عاليًا ومرونة في التعامل مع البيانات. استمر في استكشاف ميزات GraphQL المتقدمة مثل الاشتراكات (Subscriptions) والمصادقة لتوسيع إمكانيات تطبيقاتك.

التعليقات

اترك تعليقاً