Crow — إطار عمل ويب مصغر للغة C++
1. ما هو Crow ولماذا تستخدمه؟
Crow هو إطار عمل ويب مصغر (micro-web framework) خفيف وسريع وحديث للغة C++، مستوحى من إطار Flask الشهير بلغة Python. صُمم لبناء REST API وخدمات الويب وتطبيقات الويب البسيطة بأقل قدر من الكود وبدون الحاجة إلى إعدادات معقدة. تمت كتابة Crow باستخدام معيار C++17/20 ويعتمد على مكتبات asio (أو boost.asio) للمعالجة غير المتزامنة للطلبات، مما يجعله واحداً من أسرع الحلول في مجاله.
لماذا تستخدم Crow؟ إذا كنت بحاجة إلى تشغيل خادم HTTP بلغة C++ بسرعة لمعالجة طلبات JSON أو تقديم ملفات ثابتة أو بناء خدمة مصغرة (microservice)، فإن Crow هو الخيار الأمثل. على عكس الأطر الثقيلة مثل drogon أو pistache، يتميز Crow بحجم صغير جداً وواجهة برمجة تطبيقات (API) بسيطة، ولا يتطلب توليد كود أو ماكرو معقد. يناسب Crow بشكل ممتاز الأنظمة المضمنة (embedded systems) وأجهزة إنترنت الأشياء (IoT) وخوادم الألعاب وأي سيناريو تكون فيه السرعة واستهلاك الذاكرة المنخفض أمراً مهماً.
يدعم Crow توجيه المسارات (routing) بما في ذلك المعاملات الديناميكية في URL، والوسائط (middleware)، والتعامل مع JSON (عبر مكتبة مدمجة أو مكتبة nlohmann/json)، و WebSocket، و CORS، و multipart/form-data، وغيرها الكثير. الإطار في تطور نشط، وله توثيق جيد ومجتمع مستقر.
2. طريقة التثبيت
Crow هي مكتبة "header-only" في معظم الحالات، لذا فإن التثبيت يقتصر على استنساخ المستودع (repository) وتضمين ملفات الرأس (header files). ومع ذلك، يُوصى باستخدام CMake لبناء الأمثلة والمشاريع.
الطريقة الأولى: الاستنساخ (موصى به للتطوير)
git clone https://github.com/CrowCpp/Crow.git
cd Crow
mkdir build
cd build
cmake ..
make
sudo make install
الطريقة الثانية: استخدام vcpkg
vcpkg install crow
الطريقة الثالثة: التضمين عبر CMake FetchContent
include(FetchContent)
FetchContent_Declare(
crow
GIT_REPOSITORY https://github.com/CrowCpp/Crow.git
GIT_TAG v1.0.0
)
FetchContent_MakeAvailable(crow)
target_link_libraries(your_project PRIVATE Crow::Crow)
ملاحظة مهمة: يتطلب Crow مترجمًا يدعم معيار C++17 (مثل gcc 8+ أو clang 7+ أو MSVC 2019+). كما أن مكتبة asio (أو boost.asio) ضرورية. إذا كنت تستخدم vcpkg، فسيتم تثبيت التبعيات تلقائياً.
3. البداية السريعة — مثال عملي مصغر
قم بإنشاء ملف باسم main.cpp بالمحتوى التالي:
#include "crow.h"
int main() {
crow::SimpleApp app;
// تعريف مسار لجذر الموقع
CROW_ROUTE(app, "/")([](){
return "مرحباً بك في Crow!";
});
// تشغيل الخادم على المنفذ 8080
app.port(8080).multithreaded().run();
}
قم بتجميع الكود وتشغيله:
g++ -std=c++17 -pthread main.cpp -o crow_server
./crow_server
افتح المتصفح واذهب إلى http://localhost:8080. ستظهر لك رسالة الترحيب.
4. أهم الدوال والكلاسات الأساسية
4.1. crow::SimpleApp
التوقيع: class SimpleApp : public crow::App<Middleware...>
الوظيفة: الكلاس الرئيسي للتطبيق. يدير المسارات (routes) والوسائط (middleware) ودورة حياة الخادم. SimpleApp هو إعداد مسبق التهيئة