ميكروسيرفيسات C++: دليل البداية في 2024

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

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

ابدأ الدورة

ميكروسيرفيسات C++: دليل البداية في 2024

\n\n

عندما تسمع كلمة "ميكروسيرفيسات"، يتبادر إلى ذهنك عادةً Go أو Java أو Python. لكن C++؟ يبدو أن هذه اللغة منخفضة المستوى ومعقدة وغير مناسبة للويب. لكن هذا الاعتقاد خاطئ. في السنوات الأخيرة، تشهد C++ ولادة جديدة في مجال الباك إند: المعايير الحديثة (C++17/20)، والأطر خفيفة الوزن، والأدوات الناضجة تجعلها خيارًا ممتازًا للميكروسيرفيسات عالية الأداء. إذا كان مشروعك يتطلب استهلاكًا منخفضًا للذاكرة، أو أقصى أداء، أو العمل على معماريات ARM/MIPS، فإن C++ قد تكون ورقتك الرابحة.

\n\n

في هذا المقال، سأوضح لك من أين تبدأ حقًا: سنختار إطار العمل، ونكتب خدمة HTTP بسيطة، ونضيف gRPC، ونُحزم كل شيء في Docker. لا ماء ولا حشو — فقط كود وتطبيق عملي.

\n\n
\n\n

لماذا استخدام C++ للميكروسيرفيسات ليس جنونًا؟

\n\n

الحجة الرئيسية لمعارضي C++: "الكتابة طويلة وسهولة ارتكاب الأخطاء". لكن C++ الحديثة مع المؤشرات الذكية، وحاويات STL، و RAII تسمح بالكتابة بسرعة تقريبًا مثل Go، مع إعطائك تحكمًا كاملاً في الذاكرة. المزايا واضحة:

\n\n
    \n
  • السرعة — C++ أسرع من Java/Python بمقدار 2-10 مرات في عمليات الإدخال/الإخراج والحسابات.
  • \n
  • استهلاك الذاكرة — الميكروسيرفيس النموذجي على C++ يستهلك 5-15 ميجابايت مقارنة بـ 50-150 ميجابايت على Java.
  • \n
  • غياب GC — لا توقف بسبب جامع القمامة، زمن استجابة قابل للتنبؤ.
  • \n
  • النظام البيئي — gRPC، Boost، nlohmann/json، Crow، Drogon — كل شيء يعمل فورًا.
  • \n
\n\n

هناك أيضًا عيوب: مترجم أكثر صرامة، وقت بناء أطول، تصحيح أخطاء أكثر تعقيدًا. لكن إذا كنت بحاجة إلى أداء على مستوى الأنظمة المالية، أو خوادم الألعاب، أو إنترنت الأشياء — فإن C++ هي الخيار الأمثل.

\n\n
\n\n

اختيار إطار العمل: Crow vs Drogon vs Pistache

\n\n

لبداية سريعة، لا تحتاج إلى كتابة خادم HTTP من الصفر على المقابس (sockets). هناك ثلاثة خيارات شائعة:

\n\n

1. Crow (خفيف الوزن، header-only)

\n

مثالي للميكروسيرفيسات التي تحتوي على 5-10 نقاط نهاية. فقط قم بتضمين ملف رأس واحد وستكون جاهزًا. العيب: لا يدعم HTTP/2، توجيه ضعيف.

\n\n

2. Drogon (متكامل الميزات)

\n

أفضل خيار للمشاريع الجادة: HTTP/1.1 و HTTP/2، WebSocket، AOP، العمل مع قواعد البيانات، ORM. Drogon مستوحى من ASP.NET و Django — يمكنه حتى إنشاء JSON تلقائيًا من النماذج.

\n\n

3. Pistache (حديث لكن غير ناضج)

\n

بديل مثير للاهتمام، لكنه لا يزال غير مستقر للإنتاج.

\n\n

أنصح بالبدء بـ Crow — فهو بسيط ويسمح لك بالحصول على REST API يعمل في 10 دقائق. أما للمشاريع الجادة، فاتجه نحو Drogon.

\n\n
\n\n

تطبيق عملي: كتابة ميكروسيرفيس على C++ باستخدام Crow

\n\n

سننشئ خدمة بسيطة تستقبل JSON باسم المستخدم وتُرجع تحية. هذا هو "Hello World" الكلاسيكي، لكن بأسلوب الميكروسيرفيسات.

\n\n

الخطوة 1: تثبيت التبعيات

\n

ستحتاج إلى CMake ومترجم يدعم C++17 (gcc 9+، clang 10+). Crow هو header-only، لذا فقط قم بنسخ الملف crow_all.h من المستودع.

\n\n
# تحميل Crow\nwget https://github.com/CrowCpp/Crow/releases/download/v1.1.0/crow_all.h\n
\n\n

الخطوة 2: كود الخدمة

\n\n
// main.cpp\n#include "crow_all.h"\n#include <iostream>\n#include <string>\n\nint main() {\n    crow::SimpleApp app;\n\n    // GET /hello — فحص الصحة\n    CROW_ROUTE(app, "/hello")\n    ([](){\n        return crow::response(200, "Hello, World!");\n    });\n\n    // POST /greet — يستقبل JSON {"name": "Alice"}\n    CROW_ROUTE(app, "/greet").methods(crow::HTTPMethod::POST)\n    ([](const crow::request& req){\n        auto body = crow::json::load(req.body);\n        if (!body || !body.has("name")) {\n            return crow::response(400, "Bad Request: missing 'name'");\n        }\n        std::string name = body["name"].s();\n        crow::json::wvalue result;\n        result                

المدونات

توصيات الكتب