مقدمة في دوال Serverless بلغة Swift مع AWS Lambda
\n\nتستمر بنية Serverless في اكتساب شعبية بين المطورين، والآن Swift ليست استثناء. بفضل دعم Swift على منصة AWS Lambda، يمكن لمطوري iOS و macOS كتابة دوال سحابية بلغتهم الأم، باستخدام كامل قوة نظام Swift البيئي. في هذه المقالة، سنشرح كيفية إنشاء وإعداد ونشر دالة serverless بلغة Swift من الصفر.
\n\nتتيح دوال Serverless تشغيل الكود دون إدارة الخوادم. أنت تدفع فقط مقابل وقت التنفيذ، ويتم التوسع تلقائيًا. يدعم AWS Lambda لغة Swift من خلال صور runtime الرسمية، مما يجعله خيارًا ممتازًا لمهام backend في نظام Apple البيئي.
\n\nتحضير البيئة لتطوير Swift على AWS Lambda
\n\nتثبيت الأدوات اللازمة
\n\nقبل البدء، تأكد من تثبيت ما يلي:
\n\n- \n
- Swift 5.9+ — يمكن تنزيله من swift.org \n
- Docker — للبناء في بيئة Linux \n
- AWS CLI — للنشر \n
- Xcode 15+ (اختياري، لنظام macOS) \n
إنشاء مشروع Swift Package
\n\nلننشئ Swift Package جديدًا مع دعم AWS Lambda:
\n\nmkdir MyLambdaFunction\ncd MyLambdaFunction\nswift package init --type executable\n\nافتح Package.swift وأضف التبعية إلى AWSLambdaRuntime:
// swift-tools-version: 5.9\nimport PackageDescription\n\nlet package = Package(\n name: "MyLambdaFunction",\n platforms: [.macOS(.v13)],\n dependencies: [\n .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0")\n ],\n targets: [\n .executableTarget(\n name: "MyLambdaFunction",\n dependencies: [\n .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime")\n ]\n )\n ]\n)\n\nكتابة أول دالة Serverless بلغة Swift
\n\nالهيكل الأساسي لدالة Lambda
\n\nلننشئ ملف Sources/MyLambdaFunction/main.swift بالمحتوى التالي:
import AWSLambdaRuntime\nimport AWSLambdaEvents\n\n// تعريف هيكل الطلب\nstruct GreetingRequest: Codable {\n let name: String\n}\n\n// تعريف هيكل الرد\nstruct GreetingResponse: Codable {\n let message: String\n let timestamp: String\n}\n\n// المعالج الرئيسي\n@main\nstruct MyLambdaHandler: SimpleLambdaHandler {\n typealias Event = GreetingRequest\n typealias Output = GreetingResponse\n \n func handle(_ event: GreetingRequest, context: LambdaContext) async throws -> GreetingResponse {\n let dateFormatter = DateFormatter()\n dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\n \n return GreetingResponse(\n message: "مرحبًا، \\(event.name)! أهلاً بك في عالم Serverless بلغة Swift.",\n timestamp: dateFormatter.string(from: Date())\n )\n }\n}\n\nمعالجة طلبات HTTP (API Gateway)
\n\nللعمل مع API Gateway، استخدم APIGatewayV2Request:
import AWSLambdaRuntime\nimport AWSLambdaEvents\n\n@main\nstruct HTTPHandler: SimpleLambdaHandler {\n typealias Event = APIGatewayV2Request\n typealias Output = APIGatewayV2Response\n \n func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {\n // الحصول على البيانات من معاملات query\n let name = event.queryStringParameters?["name"] ?? "ضيف"\n \n let responseBody = """\n {\n "message": "Hello, \\(name)!",\n "path": "\\(event.rawPath)"\n }\n """\n \n return APIGatewayV2Response(\n statusCode: .ok,\n