توليد Swagger/OpenAPI لـ C++: أفضل الأدوات والمكتبات

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

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

ابدأ الدورة

توليد Swagger/OpenAPI لـ C++: كيفية أتمتة إنشاء REST API

\n\n

يتطلب تطوير الويب الحديث بلغة C++ أدوات فعالة لإنشاء REST API. أصبحت مواصفات OpenAPI (المعروفة سابقًا باسم Swagger) معيارًا لوصف واجهات خدمات الويب. ومع ذلك، فإن التوليد التلقائي للكود بلغة C++ بناءً على مواصفات OpenAPI مهمة غير تافهة. في هذه المقالة، سنستعرض أفضل المكتبات والأدوات التي ستساعدك في توليد كود الخادم والعميل بلغة C++ من مستندات OpenAPI.

\n\n

لماذا تتخلف لغة C++ عن اللغات الأخرى في توليد OpenAPI؟

\n

على عكس Python أو Java أو JavaScript، حيث توجد مولدات ناضجة (مثل openapi-generator)، تواجه لغة C++ عدة مشاكل:

\n
    \n
  • غياب معيار موحد لأطر HTTP — لا يوجد إطار ويب مهيمن في C++ مثل Flask أو Spring.
  • \n
  • صعوبة إدارة الذاكرة — يتطلب توليد كود آمن باستخدام المؤشرات الذكية أنماطًا إضافية.
  • \n
  • تنوع الأنواع — يتطلب تسلسل JSON في C++ إعدادًا يدويًا للهياكل المعقدة.
  • \n
\n\n

الأدوات الرئيسية لتوليد كود C++ من OpenAPI

\n\n

1. OpenAPI Generator (المولد الرسمي)

\n

الأداة الأكثر شيوعًا هي OpenAPI Generator (المعروفة سابقًا باسم Swagger Codegen). وهي تدعم العديد من اللغات، بما في ذلك C++. ومع ذلك، فإن دعمها لـ C++ محدود: يتم توليد كود العميل فقط بناءً على cpprestsdk (Casablanca) أو Qt.

\n

التثبيت:

\n
# عبر npm\nnpm install @openapitools/openapi-generator-cli -g\n\n# توليد عميل C++ (cpprestsdk)\nopenapi-generator generate -i petstore.yaml -g cpp-restsdk -o ./client
\n

مثال على الكود المولد (Qt):

\n
// PetApi.h\nclass PetApi : public AbstractOpenAPISchema {\n    Q_OBJECT\npublic:\n    explicit PetApi(QObject *parent = nullptr);\n    \n    void addPet(const Pet &body);\n    void getPetById(qint64 petId);\n    \nsignals:\n    void addPetSignal(Pet &result);\n    void getPetByIdSignal(Pet &result);\n};
\n

الإيجابيات: دعم العديد من التنسيقات، مجتمع نشط.
\nالسلبيات: غالبًا ما يتطلب الكود المولد تحسينات؛ لا يوجد توليد للخادم لـ C++.

\n\n

2. oat++ (oatpp) — إطار عمل مع دعم OpenAPI

\n

oat++ هو إطار عمل حديث بلغة C++ لإنشاء REST API، ويتضمن دعمًا مدمجًا لـ OpenAPI. على عكس المولدات، يستخدم oat++ نهجًا تصريحيًا مع التعليقات التوضيحية.

\n

مثال على وصف نقطة النهاية:

\n
ENDPOINT("GET", "/users/{userId}", getUser) {\n    auto userId = req->getPathVariable("userId");\n    auto user = userService->getUser(userId);\n    \n    // توثيق OpenAPI تلقائي\n    auto dto = UserDto::createShared();\n    dto->id = user->id;\n    dto->name = user->name;\n    return createDtoResponse(Status::CODE_200, dto);\n}
\n

يقوم Oat++ تلقائيًا بتوليد openapi.yaml بناءً على التعليقات التوضيحية. وهذا يسمح بعدم كتابة المواصفات يدويًا، بل استخلاصها من الكود.

\n\n

3. Restbed + Swagger UI

\n

Restbed هو إطار HTTP خفيف لـ C++11. بالاقتران مع مكتبة restbed-swagger، يمكن توليد توثيق OpenAPI ديناميكيًا.

\n
#include <restbed>\n#include <restbed-swagger>\n\nauto resource = std::make_shared<restbed::Resource>();\nresource->set_path("/api/users/{id}");\n\n// وصف المعلمات لـ Swagger\nrestbed::swagger::Info info;\ninfo.set_title("User API");\ninfo.set_version("1.0.0");\n\nauto swagger = std::make_shared<restbed::swagger::Service>(info);\nswagger->publish(resource);
\n\n

4. Crow — إطار عمل مصغر مع امتداد OpenAPI

\n

Crow —

توصيات