GraphQL في C# (.NET): دليل شامل لمكتبة GraphQL.NET

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

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

ابدأ الدورة

مكتبة GraphQL لـ C# (.NET): GraphQL.NET



GraphQL هي لغة استعلام حديثة لـ API، تتيح للعملاء طلب البيانات الضرورية فقط، مما يقلل التكرار ويسرع أداء التطبيقات. لمنصة .NET توجد مكتبة قوية GraphQL.NET، تسمح لمطوري C# بإنشاء أجزاء خادم متوافقة تمامًا مع مواصفات GraphQL. في هذه المقالة سنشرح بالتفصيل إمكانياتها ومزاياها وسنقدم أمثلة عملية.



ما هو GraphQL.NET؟



GraphQL.NET هي مكتبة مفتوحة المصدر لـ C# (.NET)، تنفذ مواصفات GraphQL. توفر أدوات لتعريف المخططات (الأنواع، الاستعلامات، التحويرات والاشتراكات)، معالجة الاستعلامات الواردة، التحقق من الصحة وتنفيذ المنطق. المكتبة مدعومة بنشاط من المجتمع وتُستخدم في بيئات الإنتاج.



الميزات الرئيسية:

  • تعريف مخطط مرن — الأنواع، الواجهات، أنواع الاتحاد والتعدادات.
  • دعم الاستعلامات (Query)، التحويرات (Mutation) والاشتراكات (Subscription).
  • التكامل مع حاويات DI (مثل Microsoft.Extensions.DependencyInjection).
  • التحقق من الصحة والتحليل للاستعلامات على جانب الخادم.
  • دعم DataLoader لتحسين استعلامات N+1.
  • أدوات للاختبار وتصحيح الأخطاء.


التثبيت والإعداد



يتم التثبيت عبر NuGet Package Manager. نفذ الأمر:

dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson


لـ ASP.NET Core ستحتاج أيضًا إلى حزمة middleware:

dotnet add package GraphQL.Server.Transports.AspNetCore


إنشاء GraphQL API بسيط



1. تعريف أنواع البيانات



أولاً، لننشئ نموذج البيانات ونوع GraphQL المقابل:

public class Book{    public int Id { get; set; }    public string Title { get; set; }    public string Author { get; set; }}

public class BookType : ObjectType<Book>{ protected override void Configure(IObjectTypeDescriptor<Book> descriptor) { descriptor.Field(b => b.Id).Type<NonNullType<IntType>>(); descriptor.Field(b => b.Title).Type<NonNullType<StringType>>(); descriptor.Field(b => b.Author).Type<StringType>(); }}


2. تعريف الاستعلامات (Query)



الآن لننشئ كلاس Query الذي سيعالج الاستعلامات:

public class Query{    private readonly List<Book> _books = new()    {        new Book { Id = 1, Title = "1984", Author = "George Orwell" },        new Book { Id = 2, Title = "Brave New World", Author = "Aldous Huxley" }    };

public Book GetBook(int id) { return _books.FirstOrDefault(b => b.Id == id); }

public List<Book> GetBooks() { return _books; }}


ثم نسجل هذا الكلاس في المخطط:

public class BookSchema : Schema{    public BookSchema(IServiceProvider provider) : base(provider)    {        Query = provider.GetRequiredService<Query>();    }}


3. الإعداد في Startup.cs



نضيف الخدمات و middleware في ASP.NET Core:

public void ConfigureServices(IServiceCollection services){    services.AddGraphQL(builder => builder        .AddSchema<BookSchema>()        .AddSystemTextJson());}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ app.UseGraphQL<BookSchema>(); app.UseGraphQLPlayground(); // للاختبار}


التحويرات (Mutation) لتعديل البيانات



لنضف إمكانية إضافة كتب عبر التحويرات:

توصيات