توليد Swagger/OpenAPI لـ TypeScript: دليل شامل للأدوات
\n\nيرتبط تطوير تطبيقات الويب الحديثة بلغة TypeScript ارتباطًا وثيقًا بإنشاء عملاء API آمنين من حيث الأنواع. كتابة الواجهات يدويًا لكل نقطة نهاية (Endpoint) هي مهمة شاقة وعرضة للأخطاء. لحسن الحظ، يوجد نهج قوي - وهو التوليد التلقائي لكود TypeScript من مواصفات OpenAPI (Swagger). في هذه المقالة، سنستعرض بالتفصيل أفضل الأدوات لهذه المهمة، وإمكانياتها، وأمثلة على استخدامها.
\n\nلماذا يجب استخدام التوليد من OpenAPI؟
\nOpenAPI (المعروف سابقًا باسم Swagger) هو معيار لوصف REST API. باستخدام ملف مواصفات بصيغة YAML أو JSON، تحصل على:
\n- \n
- تحديد أنواع بنسبة 100% — واجهات TypeScript تتطابق تمامًا مع مخطط الطلبات والاستجابات \n
- مزامنة مع الواجهة الخلفية (Backend) — عند تغيير API، يكفي إعادة توليد الكود \n
- تقليل الأخطاء — يكتشف مترجم TypeScript عدم تطابق الأنواع في مرحلة التطوير \n
- الإكمال التلقائي في بيئة التطوير (IDE) — يوفر IntelliSense اقتراحات للحقول والأنواع \n
أفضل أدوات توليد TypeScript من OpenAPI
\n\n1. openapi-typescript-codegen (موصى به)
\nحظيت هذه الأداة بشعبية كبيرة بفضل بساطتها ونهجها الحديث. تقوم بتوليد كود نظيف ومنظم جيدًا مع دعم axios أو fetch.
\n\nالتثبيت:
\nnpm install -D openapi-typescript-codegen\n\nمثال على الاستخدام:
\nnpx openapi-typescript-codegen --input ./spec.yaml --output ./generated --client axios\n\nالكود المولد:
\n// generated/models/User.ts\nexport interface User {\n id: number;\n name: string;\n email: string;\n role: 'admin' | 'user';\n}\n\n// generated/services/UserService.ts\nexport class UserService {\n public async getUsers(): Promise<User[]> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users',\n });\n }\n}\n\nالمزايا:
\n- \n
- دعم OpenAPI 3.0 و 3.1 \n
- توليد النماذج والخدمات والأنواع للطلبات \n
- توليد اختياري لـ hooks الخاصة بـ React Query \n
- قوالب قابلة للتخصيص عبر Handlebars \n
2. OpenAPI Generator (openapi-generator)
\nالمولد الرسمي من مجتمع OpenAPI. يدعم أكثر من 50 لغة، بما في ذلك TypeScript (عدة مولدات).
\n\nالتثبيت:
\nnpm install -D @openapitools/openapi-generator-cli\n\nمثال على الاستخدام:
\nnpx openapi-generator-cli generate \\\n -i spec.yaml \\\n -g typescript-axios \\\n -o ./generated\n\nالكود المولد:
\n// generated/api.ts\nexport const UsersApiAxiosParamCreator = {\n getUsers: async (options?: AxiosRequestConfig): Promise<RequestArgs> => {\n const localVarPath = `/users`;\n return {\n url: localVarPath,\n method: 'GET',\n };\n }\n}\n\nالميزات:
\n- \n
- المولدات: typescript-axios، typescript-fetch، typescript-angular \n
- دعم التفويض (OAuth2، API Key) \n
- توليد الوثائق والاختبارات \n
- العمل عبر CLI أو إضافات Maven/Gradle \n
3. swagger-typescript-api
\nمولد خفيف وسريع، يركز على TypeScript النظيف بدون تبعيات إضافية.
\n\nالتثبيت:
\nnpm install -D swagger-typescript-api\n\nمثال على الاستخدام:
\nnpx swagger-typescript-api -p ./spec.yaml -o ./generated -n api.ts\n\nالكود المولد: