مقدمة في GraphQL مع C#
GraphQL هي لغة استعلام لواجهات برمجة التطبيقات (API) طورتها Facebook، والتي تتيح للعملاء إمكانية طلب البيانات التي يحتاجونها فقط. على عكس REST، حيث تكون نقاط النهاية ثابتة، يسمح GraphQL بتشكيل استجابات الخادم بمرونة. في هذا الدليل التعليمي، سنقوم بإنشاء GraphQL API كامل باستخدام C# ومكتبة Hot Chocolate - الحل الأكثر شيوعًا لـ .NET.
سننتقل من التثبيت إلى تنفيذ الاستعلامات والتحويرات والاشتراكات. في نهاية المقال، ستكون قادرًا على نشر خادم GraphQL باستخدام C# ودمجه في مشاريعك الخاصة.
1. تثبيت وإعداد المشروع
للبدء، سنقوم بإنشاء مشروع ASP.NET Core جديد. تأكد من تثبيت .NET SDK (الإصدار 6.0 أو أعلى). افتح الطرفية أو سطر الأوامر ونفذ:
dotnet new web -n GraphQLDemocd GraphQLDemoالآن قم بتثبيت حزمة Hot Chocolate:
dotnet add package HotChocolate.AspNetCoredotnet add package HotChocolate.AspNetCore.Playgroundبعد التثبيت، افتح ملف Program.cs وقم بإعداد الخادم:
using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// إضافة خدمات GraphQLbuilder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
// توصيل middleware GraphQLapp.MapGraphQL();
// إضافة Playground للاختبارapp.UsePlayground();
app.Run();الآن قم بإنشاء فئة Query بسيطة في ملف منفصل Query.cs:
public class Query{ public string Hello() => "مرحبًا، عالم GraphQL!";}قم بتشغيل المشروع باستخدام الأمر dotnet run وافتح المتصفح على العنوان http://localhost:5000/graphql. سترى واجهة Playground حيث يمكنك تنفيذ الاستعلام:
{ hello}الرد: { "data": { "hello": "مرحبًا، عالم GraphQL!" } }
2. إنشاء الأنواع والاستعلامات
GraphQL مقيد بالأنواع بشكل صارم. في C#، نستخدم الفئات لتعريف الأنواع. لنقم بإنشاء نموذج Book و Author:
public class Book{ public int Id { get; set; } public string Title { get; set; } public Author Author { get; set; }}
public class Author{ public int Id { get; set; } public string Name { get; set; } public List<Book> Books { get; set; }}الآن أضف مخزن بيانات (في مشروع حقيقي استخدم قاعدة بيانات) وقم بتوسيع فئة Query:
public class Query{ private static List<Author> _authors = new() { new Author { Id = 1, Name = "ليف تولستوي", Books = new List<Book> { new Book { Id = 1, Title = "الحرب والسلام", Author = null }, new Book { Id = 2, Title = "آنا كارنينا", Author = null } } }, new Author { Id = 2, Name = "فيودور دوستويفسكي", Books = new List<Book> { new Book { Id = 3, Title = "الجريمة والعقاب", Author = null } } } };
public List<Author> GetAuthors() => _authors;
public Author GetAuthor(int id) => _authors.FirstOrDefault(a => a.Id == id); public List<Book> GetBooks() => _authors.SelectMany(a => a.Books).ToList();}لاحظ: لم نقم بتعريف الأنواع بشكل صريح - يقوم Hot Chocolate تلقائيًا بإنشاء المخطط بناءً على فئات C#. الآن يمكنك تنفيذ الاستعلامات:
{ authors { id name books { title } }}