API بلغة C#: REST وGraphQL وgRPC — كيف تختار ولا تندم

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

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

ابدأ الدورة

مقدمة: API ليس مخيفًا، بل مفيد جدًا

\n\n

تخيل أنك تطلب بيتزا. تتصل بالمطعم، تملي العنوان والمكونات — وبعد 30 دقيقة يكون الساعي عند الباب. API في البرمجة يعمل تمامًا بنفس الطريقة: إنها "المكالمة الهاتفية" التي تتواصل من خلالها برنامج مع آخر. فقط بدلاً من الصوت — طلبات HTTP، وبدلاً من البيتزا — بيانات.

\n\n

في عالم تطوير C#، API هو الأساس. أي مشروع حديث، سواء كان تطبيق ويب، خلفية جوال، أو خدمة مؤسسية، بطريقة أو بأخرى "يستدعي" خدمات خارجية. وهنا يطرح السؤال الرئيسي: أي بروتوكول تختار؟ REST أم GraphQL أم gRPC؟ كل منهم جيد بطريقته الخاصة، ولكن كل منهم لمهمته الخاصة.

\n\n

في هذه المقالة، سنشرح العمل مع API بلغة C# بأمثلة حقيقية. ستتعلم كيفية إرسال طلبات HTTP، وكيفية توحيد C# مع GraphQL وgRPC، والأهم — ستفهم متى تستخدم أيًا منها. هيا بنا!

\n\n
\n\n

1. REST API بلغة C#: الكلاسيكية التي لا تشيخ

\n\n

REST (Representational State Transfer) هو أسلوب معماري ظل المعيار الفعلي لسنوات عديدة. بسيط، مفهوم، يعمل فوق HTTP. إذا سبق لك كتابة كود يرسل طلبات GET أو POST — فقد عملت بالفعل مع REST.

\n\n

كيفية إرسال طلبات REST في C#

\n\n

في C#، للعمل مع REST غالبًا ما يُستخدم الفئة HttpClient. إنها مدمجة في .NET وتستطيع فعل كل شيء: من طلبات GET البسيطة إلى طلبات POST المعقدة مع نص JSON.

\n\n

إليك كيف يبدو طلب نموذجي إلى REST API بلغة C#:

\n\n
using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        using HttpClient client = new HttpClient();\n        client.BaseAddress = new Uri("https://api.example.com/");\n        \n        HttpResponseMessage response = await client.GetAsync("users/1");\n        if (response.IsSuccessStatusCode)\n        {\n            string json = await response.Content.ReadAsStringAsync();\n            Console.WriteLine(json);\n        }\n    }\n}\n
\n\n

باختصار ووضوح. HttpClient يعيش طويلاً، لذلك عادةً ما يتم إنشاؤه مرة واحدة وإعادة استخدامه (في المشاريع الحقيقية — عبر حاوية DI).

\n\n

متى يكون REST هو اختيارك

\n
    \n
  • عند كتابة API عام للويب أو تطبيقات الجوال.
  • \n
  • العملاء هم متصفحات، أجهزة جوالة، إنترنت الأشياء.
  • \n
  • تحتاج إلى البساطة والتخزين المؤقت على مستوى HTTP.
  • \n
\n\n

عيوب REST: تكرار البيانات (غالبًا ما يأتي أكثر مما تحتاج) ومشكلة طلبات N+1، حيث للحصول على بيانات مرتبطة يجب إجراء عدة استدعاءات.

\n\n
\n\n

2. GraphQL بلغة C#: اطلب فقط ما تحتاجه

\n\n

GraphQL هي لغة استعلامات أنشأتها Facebook. ميزتها الرئيسية: العميل نفسه يقرر الحقول التي يحتاجها. لا معلومات زائدة، لا عشرات نقاط النهاية — استعلام واحد، رد واحد.

\n\n

إرسال استعلام GraphQL من C#

\n\n

للعمل مع GraphQL بلغة C# يمكن استخدام HttpClient مباشرة، لكن الأفضل استخدام مكتبة GraphQL.Client (حزمة NuGet GraphQL.Client).

\n\n

مثال لاستعلام إلى GraphQL API:

\n\n
using System;\nusing System.Threading.Tasks;\nusing GraphQL;\nusing GraphQL.Client.Http;\nusing GraphQL.Client.Serializer.Newtonsoft;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        using var client = new GraphQLHttpClient("https://api.example.com/graphql", new NewtonsoftJsonSerializer());\n\n        var request = new GraphQLRequest\n        {\n            Query = @"\n            {\n                user(id: 1) {\n                    name\n                    email\n                    posts {\n                        title\n                    }\n                }\n            }"\n        };\n\n        var response = await client.SendQueryAsync<dynamic                

المدونات

توصيات الكتب