مكتبة GraphQL لـ C# (.NET) — GraphQL.NET
GraphQL هي لغة استعلام لواجهات برمجة التطبيقات (API) تتيح للعملاء طلب البيانات التي يحتاجونها فقط. في النظام البيئي لـ .NET، واحدة من أشهر التطبيقات هي مكتبة GraphQL.NET (المعروفة أيضًا باسم graphql-dotnet). توفر أدوات قوية لإنشاء واجهات برمجة تطبيقات مرنة ومكتوبة بشكل صارم وفعالة على منصة C# (.NET).
في هذه المقالة، سنستعرض بالتفصيل كيفية استخدام GraphQL.NET، وسنشرح المفاهيم الأساسية ونقدم أمثلة عملية على الكود.
ما هو GraphQL.NET؟
GraphQL.NET هي مكتبة مفتوحة المصدر تنفذ مواصفات GraphQL لمنصة .NET. تدعم كلاً من .NET Core و .NET Framework. الإمكانيات الرئيسية:
- إنشاء مخططات مكتوبة بشكل صارم باستخدام C#.
- دعم الاستعلامات (Query) والتحويرات (Mutation) والاشتراكات (Subscription).
- التحقق من الصحة وتنفيذ الاستعلامات المدمجة.
- التكامل مع أطر الويب الشائعة (ASP.NET Core، Nancy وغيرها).
- دعم الاشتراكات عبر WebSockets (SignalR).
التثبيت والإعداد
للبدء، قم بتثبيت الحزمة عبر NuGet:
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson // لتسلسل JSONإذا كنت تستخدم ASP.NET Core، قم بتثبيت ما يلي أيضًا:
dotnet add package GraphQL.Server.Transports.AspNetCoredotnet add package GraphQL.Server.Ui.Playground // واجهة مستخدم مدمجة للاختبارإنشاء المخطط الأول
يعتمد GraphQL على مخطط يحدد أنواع البيانات والعمليات المتاحة. لنلق نظرة على مثال بسيط — واجهة برمجة تطبيقات للحصول على معلومات عن الكتب.
الخطوة 1. حدد نموذج البيانات:
public class Book{ public string Id { get; set; } public string Title { get; set; } public string Author { get; set; } public int Pages { get; set; }}الخطوة 2. أنشئ أنواع GraphQL:
public class BookType : ObjectGraphType<Book>{ public BookType() { Field(x => x.Id).Description("معرف الكتاب"); Field(x => x.Title).Description("عنوان الكتاب"); Field(x => x.Author).Description("المؤلف"); Field(x => x.Pages).Description("عدد الصفحات"); }}الخطوة 3. حدد الاستعلام الجذري (Query):
public class BookQuery : ObjectGraphType{ public BookQuery(IDataStore dataStore) { Field<BookType>("book") .Arguments(new QueryArguments(new QueryArgument<StringGraphType> { Name = "id" })) .Resolve(context => dataStore.GetBookById(context.GetArgument<string>("id")));
Field<ListGraphType<BookType>>("books") .Resolve(context => dataStore.GetAllBooks()); }}الخطوة 4. قم بتجميع المخطط:
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<BookQuery>(); }}التكامل مع ASP.NET Core
قم بتسجيل الخدمات في Program.cs (أو Startup.cs):
builder.Services.AddGraphQL(b => b .AddSystemTextJson() .AddSchema<BookSchema>() .AddGraphTypes(typeof(BookType).Assembly));
builder.Services.AddScoped<IDataStore, InMemoryDataStore>();أضف الوسيطة (middleware):
app.UseGraphQL<BookSchema>(); // نقطة النهاية الافتراضية /graphqlapp.UseGraphQLPlayground(); // واجهة مستخدم للاختبار (اختياري)تنفيذ الاستعلام
الآن يمكنك
أيضاً في المكتبة
Mongoose Paginate لجافا سكريبت (Node.js): دليل شامل مع أمثلة
MetricsKit — مراقبة تطبيقات Swift على iOS/macOS
دليل Chai الكامل لـ JavaScript (Node.js): أمثلة وطرق الاستخدام
إرسال الرسائل النصية القصيرة (SMS) باستخدام Swift (iOS/macOS): واجهة برمجة تطبيقات مكتبة MessageUI
التحقق من صحة البيانات في Node.js باستخدام Joi: دليل شامل