مقدمة: Swift تتجاوز حدود تطوير الأجهزة المحمولة
\n\nSwift ليست مجرد لغة لتطبيقات iOS وmacOS. بفضل نظام الأنواع القوي، والأداء العالي، والبنية الحديثة، يتم استخدامها بشكل متزايد في تطوير الويب من جانب الخادم. لقد نضجت بيئة Swift للخلفية: ظهرت أطر عمل غير متزامنة تعتمد على SwiftNIO، وأنظمة ORM، وتكامل مع المنصات السحابية.
\n\nفي هذه المقالة، سنستعرض أفضل 10 أطر عمل Swift لتطوير الويب، مع التركيز على المطورين المتقدمين. ستتعرف على خصائصها المعمارية، وأمثلة على الكود، وسيناريوهات الاستخدام. ستكون المادة مفيدة لأولئك الذين هم على دراية بالفعل بتطوير iOS ويريدون توسيع مهاراتهم إلى جانب الخادم.
\n\n1. Vapor: القائد بلا منازع في النظام البيئي
\n\nVapor هو إطار العمل الأكثر شيوعًا لخادم Swift. تم بناؤه على SwiftNIO ويوفر مجموعة كاملة من الأدوات: التوجيه، والبرمجيات الوسيطة، وWebSocket، والمصادقة، وORM (Fluent). يتم دعم Vapor بنشاط من قبل المجتمع ويحتوي على وثائق شاملة.
\n\nالهندسة المعمارية والأداء
\nيستخدم Vapor نموذجًا غير متزامن يعتمد على EventLoop. يتيح ذلك معالجة آلاف الاتصالات المتزامنة دون حظر الخيوط. يدعم الإطار هيكل MVC، ولكنه يسمح أيضًا باستخدام أنماط بديلة (مثل MVVM عبر ViewRenderer).
\n\nمثال على الكود: REST API على Vapor
\nimport Vapor\n\nfinal class UserController: RouteCollection {\n func boot(routes: RoutesBuilder) throws {\n let users = routes.grouped("api", "users")\n users.get(use: index)\n users.post(use: create)\n users.group(":id") { user in\n user.get(use: show)\n user.put(use: update)\n user.delete(use: delete)\n }\n }\n\n func index(req: Request) async throws -> [User] {\n try await User.query(on: req.db).all()\n }\n\n func create(req: Request) async throws -> User {\n let user = try req.content.decode(User.self)\n try await user.save(on: req.db)\n return user\n }\n\n func show(req: Request) async throws -> User {\n guard let user = try await User.find(req.parameters.get("id"), on: req.db) else {\n throw Abort(.notFound)\n }\n return user\n }\n\n func update(req: Request) async throws -> User {\n guard let user = try await User.find(req.parameters.get("id"), on: req.db) else {\n throw Abort(.notFound)\n }\n let updated = try req.content.decode(User.self)\n user.name = updated.name\n user.email = updated.email\n try await user.save(on: req.db)\n return user\n }\n\n func delete(req: Request) async throws -> HTTPStatus {\n guard let user = try await User.find(req.parameters.get("id"), on: req.db) else {\n throw Abort(.notFound)\n }\n try await user.delete(on: req.db)\n return .ok\n }\n}\n\nمتى تختاره: للخدمات المصغرة، وREST/GraphQL API، وتطبيقات الدردشة عبر WebSocket، والمشاريع التي تتطلب تطويرًا سريعًا ونظامًا بيئيًا غنيًا.
\n\n2. Kitura: المعيار المؤسسي من IBM
\n\nKitura هو إطار عمل طورته IBM للحلول السحابية. تم بناؤه أيضًا على SwiftNIO، ولكن له بنية أكثر رسمية. يدعم Kitura OpenAPI وKubernetes والتكامل مع IBM Cloud.
\n\nالميزات الرئيسية
\n- \n
- KituraContracts — عقود تعريفية لـ API. \n
- Kitura-OpenAPI — توليد تلقائي للتوثيق. \n
- Kitura-Credentials — نظام مصادقة معياري (OAuth، JWT، LDAP). \n
- دعم محركات القوالب Stencil وMarkdown. \n
مثال: التوجيه مع معلمات محددة النوع
\nimport Kitura\n\nlet router = Ro