واجهة برمجة تطبيقات GraphQL باستخدام Go: دليل تعليمي عملي خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

GraphQL هي لغة استعلام حديثة لواجهات برمجة التطبيقات (API)، طورتها فيسبوك. على عكس REST، تسمح للعميل بطلب البيانات الضرورية فقط، مما يقلل من حمل الشبكة ويسرع التطوير. في هذا الدليل التعليمي، سننشئ واجهة برمجة تطبيقات GraphQL كاملة بلغة Go (Golang) باستخدام المكتبة الشهيرة gqlgen. ستتعلم كيفية إعداد الخادم، تحديد المخطط، كتابة المحللات وتنفيذ الاستعلامات. المقالة موجهة للمطورين الملمين بأساسيات Go، ولكن حتى المبتدئين يمكنهم تكرار الخطوات بفضل التعليقات التفصيلية.



1. إعداد المشروع وتثبيت التبعيات

أولاً، سننشئ مشروع Go جديد ونثبت الحزم اللازمة.



الخطوة 1: تهيئة الوحدة

mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorial


الخطوة 2: تثبيت gqlgen

gqlgen هو مولد كود GraphQL للغة Go. يقوم تلقائياً بإنشاء المحللات بناءً على المخطط.

go get github.com/99designs/gqlgen@latest


الخطوة 3: توليد هيكل المشروع

قم بتشغيل أمر التهيئة:

go run github.com/99designs/gqlgen init

بعد التنفيذ، سترى الهيكل التالي:

  • graph/ — مجلد يحتوي على المخطط والمحللات
  • server.go — نقطة الدخول
  • gqlgen.yml — إعدادات المولد


2. تحديد مخطط GraphQL

المخطط (schema) يصف أنواع البيانات وعمليات API. افتح الملف graph/schema.graphqls واستبدل محتواه بما يلي:

type User {  id: ID!  name: String!  email: String!  age: Int!}

type Query { users: [User!]! user(id: ID!): User}

type Mutation { createUser(name: String!, email: String!, age: Int!): User! updateUser(id: ID!, name: String, email: String, age: Int): User deleteUser(id: ID!): Boolean}

هنا قمنا بتعريف:

  • User — كائن يحتوي على الحقول id, name, email, age.
  • Query — عمليات القراءة (الحصول على جميع المستخدمين أو مستخدم واحد بواسطة المعرف).
  • Mutation — عمليات الكتابة (إنشاء، تحديث، حذف).

بعد الحفظ، قم بتشغيل توليد الكود:

go run github.com/99designs/gqlgen generate

سيؤدي هذا إلى إنشاء الملفات models_gen.go (أنواع Go) و generated.go (واجهات المحللات).



3. تنفيذ المحللات ومخزن البيانات

الآن نحتاج إلى كتابة منطق معالجة الاستعلامات. للتبسيط، سنخزن البيانات في الذاكرة (شريحة من الهياكل).



الخطوة 1: إنشاء المخزن

أنشئ الملف graph/store.go:

package graph

import "sync"

type Store struct { mu sync.RWMutex users []User nextID int}

func NewStore() *Store { return &Store{ users: []User{ {ID: "1", Name: "Alice", Email: "alice@example.com", Age: 30}, {ID: "2", Name: "Bob", Email: "bob@example.com", Age: 25}, }, nextID: 3, }}

func (s *Store) GetUsers() []User { s.mu.RLock() defer s.mu.RUnlock() return s.users}

func (s *Store) GetUser(id string) *User { s.mu.RLock() defer s.mu.RUnlock() for _, u := range s.users { if u.ID == id { return &u } } return nil}

func (s *Store) CreateUser(name, email string, age int) User { s.mu.Lock() defer s.mu.Unlock() user := User{ ID: fmt.Sprintf("%d", s.nextID), Name: name, Email: email, Age: age, } s.nextID++ s.users = append(s.users, user) return user}

func (s *Store) UpdateUser(id string, name, email *string, age *int) *User { s.mu.Lock() defer s.mu.Unlock() for i, u := range s.users { if u.ID == id { if name != nil { s.users[i].Name = *name } if email

المدونات

توصيات الكتب