توليد Swagger/OpenAPI للغة Go (Golang): go-swagger و oapi-codegen
\n\nيتطلب تطوير خدمات الويب الحديثة بلغة Go مواصفات API صارمة. OpenAPI (المعروف سابقًا باسم Swagger) هو معيار لوصف واجهات RESTful، والذي يسمح بأتمتة إنشاء العملاء والخوادم والوثائق. في نظام Go البيئي، هناك أداتان رئيسيتان لتوليد الكود من مواصفات OpenAPI: go-swagger و oapi-codegen. في هذه المقالة، سنشرح بالتفصيل كلا النهجين، وكيفية تثبيتهما، وتطبيقاتهما العملية.
\n\nما هو OpenAPI ولماذا توليد الكود؟
\nمواصفات OpenAPI (OAS) هي تنسيق ملف (عادةً YAML أو JSON) يصف نقاط النهاية والمعلمات وأنواع البيانات ومخططات الاستجابة لواجهة API الخاصة بك. بدلاً من كتابة المعالجات والنماذج والتحقق يدويًا، يمكنك:
\n- \n
- توليد كود الخادم مع المسارات والبرمجيات الوسيطة. \n
- توليد SDK للعميل لخدمات أخرى. \n
- تحديث الوثائق تلقائيًا (Swagger UI). \n
- تجنب عدم التزامن بين المواصفات والتنفيذ. \n
الأداة رقم 1: go-swagger
\ngo-swagger هي أداة قوية ولكنها أثقل، تدعم ليس فقط التوليد ولكن أيضًا التحقق من صحة المواصفات. إنها مثالية للمشاريع المعقدة ذات الإصدارات.
تثبيت go-swagger
\n# التثبيت عبر go install (Go 1.17+)\ngo install github.com/go-swagger/go-swagger/cmd/swagger@latest\n\n# التحقق من التثبيت\nswagger version\n\nتوليد الخادم من المواصفات
\nلنفترض أن لدينا ملف api.yaml:
openapi: "3.0.0"\ninfo:\n title: Pet Store\n version: "1.0.0"\npaths:\n /pets:\n get:\n summary: List all pets\n operationId: listPets\n responses:\n '200':\n description: A list of pets\n content:\n application/json:\n schema:\n type: array\n items:\n $ref: '#/components/schemas/Pet'\ncomponents:\n schemas:\n Pet:\n type: object\n properties:\n id:\n type: integer\n name:\n type: string\n\nقم بتنفيذ توليد الخادم:
\nswagger generate server -f api.yaml -A petstore -t ./gen\nبعد التنفيذ، في المجلد ./gen ستظهر:
- \n
restapi/— المعالجات والمسارات. \n models/— هياكل البيانات (Pet, Error إلخ). \n cmd/— نقطة الدخول للتطبيق. \n
مثال على تنفيذ المعالج
\npackage restapi\n\nimport (\n "net/http"\n "petstore/gen/models"\n "petstore/gen/restapi/operations"\n)\n\nfunc configureAPI(api *operations.PetstoreAPI) http.Handler {\n api.ListPetsHandler = operations.ListPetsHandlerFunc(\n func(params operations.ListPetsParams) middleware.Responder {\n pets := []*models.Pet{\n {ID: 1, Name: "Buddy"},\n {ID: 2, Name: "Milo"},\n }\n return operations.NewListPetsOK().WithPayload(pets)\n },\n )\n return api.Serve(nil)\n}\n\nالأداة رقم 2: oapi-codegen
\noapi-codegen هو مولد حديث وخفيف وسريع جدًا من فريق DeepMap. يدعم OpenAPI 3.0 ويركز على البساطة. يُوصى به للمشاريع الجديدة.
تثبيت oapi-codegen
\ngo install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@latest\n\nتوليد الأنواع والخادم
\nنستخدم نفس المواصفات api.yaml. قم بتنفيذ:
oapi-codegen -generate types,server -package petstore api.yaml > petstore.gen.go\nالعلامة -generate تسمح باختيار ما سيتم توليده:
- \n
types— هياكل Go \n server— كود الخادم \n
أيضاً في المكتبة
دليل شامل لـ Burn في Rust: أمثلة وتطبيقات عملية
الجغرافيا المكانية والخرائط في TypeScript: المكتبات، واجهات برمجة التطبيقات وأمثلة الكود
Ktor Client في Kotlin: دليل شامل مع أمثلة
عميل OAuth للغة C++: مكتبة liboauth للترخيص
توليد تقارير PDF باستخدام JavaScript (Node.js): نظرة عامة على المكتبات وأمثلة الكود