GraphQL في C# (.NET): مكتبات Hot Chocolate و GraphQL.NET لإنشاء API

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

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

ابدأ الدورة

GraphQL في C# (.NET): مراجعة المكتبات والأدوات



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



1. Hot Chocolate — إطار عمل حديث من ChilliCream



Hot Chocolate هو إطار عمل GraphQL كامل الميزات لـ .NET، يدعم كلاً من جانب الخادم والعميل. يتكامل مع ASP.NET Core و Entity Framework Core، ويوفر سمات مريحة وتوليد تلقائي للمخطط.



التثبيت وخادم أساسي



للبدء، قم بتثبيت الحزمة عبر NuGet:



dotnet add package HotChocolate.AspNetCore


أنشئ خادم GraphQL بسيط:



// تعريف نوع البيانات
public class Book
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
}

// إنشاء فئة Query
public class Query
{
    public Book GetBook() =>
        new Book
        {
            Id = "1",
            Title = "الحرب والسلام",
            Author = "ليو تولستوي"
        };
}

// الإعداد في Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services
    .AddGraphQLServer()
    .AddQueryType<Query>();

var app = builder.Build();
app.MapGraphQL();
app.Run();

بعد التشغيل، سيكون الخادم متاحًا على العنوان /graphql. يمكنك إرسال استعلام عبر أي عميل GraphQL:

{
  book {
    title
    author
  }
}

يدعم Hot Chocolate الطفرات، الاشتراكات، التصفية، الترتيب، التقسيم إلى صفحات، والتكامل مع Entity Framework عبر UseProjection و UseFiltering و UseSorting.

مثال مع طفرة

public class Mutation
{
    public Book AddBook(string title, string author) =>
        new Book { Id = Guid.NewGuid().ToString(), Title = title, Author = author };
}

// التسجيل
builder.Services
    .AddGraphQLServer()
    .AddQueryType<Query>()
    .AddMutationType<Mutation>();

2. GraphQL.NET — مكتبة خفيفة ومثبتة عبر الزمن

GraphQL.NET (المعروفة أيضًا باسم graphql-dotnet) هي نسخة منفذة من تطبيق GraphQL الأصلي بلغة JavaScript إلى C#. توفر بناء يدوي للمخطط عبر الأنواع والحقول، مما يمنح تحكمًا كاملاً في هيكل API.

التثبيت ومثال

dotnet add package GraphQL
dotnet add package GraphQL.SystemTextJson
dotnet add package GraphQL.Server.Transports.AspNetCore

لننشئ خادمًا بسيطًا:

// تعريف النوع
public class BookType : ObjectGraphType<Book>
{
    public BookType()
    {
        Field(x => x.Id);
        Field(x => x.Title);
        Field(x => x.Author);
    }
}

// إنشاء المخطط
public class AppSchema : Schema
{
    public AppSchema(IServiceProvider provider) : base(provider)
    {
        Query = provider.GetRequiredService<BookQuery>();
    }
}

// Query
public class BookQuery : ObjectGraphType
{
    public BookQuery()
    {
        Field<BookType>("book")
            .Resolve(context => new Book
            {
                Id = "1",
                Title = "الجريمة والعقاب",
                Author = "ف.م. دوستويفسكي"
            });
    }
}

// إعداد Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<BookQuery>();
builder.Services.AddSingleton<AppSchema>();
builder.Services.AddGraphQL(b => b.AddSystemTextJson());

var app = builder.Build();\                    

توصيات