التوجيه ومعالجة الطلبات
حدّد المسارات وعالج طلبات HTTP.
التوجيه ومعالجة الطلبات درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
ما هو Vapor؟
Vapor هو إطار عمل ويب شائع للجهة الخادمية مبني على SwiftNIO. يتيح لكم كتابة واجهات HTTP الخلفية — مثل واجهات API ومواقع الويب — بالكامل باستخدام Swift، مع مشاركة اللغة وحتى النماذج مع تطبيق iOS الخاص بكم.
import Vapor
let app = try await Application.make(.detect())الكائن Application والمسارات
يمثل الكائن Application قلب خادم Vapor. تسجّلون عليه المسارات: عمليات ربط بين طريقة HTTP ومسار ودالة إغلاق للمعالجة تعيد استجابة.
app.get("hello") { req in
"Hello, world!"
}الدوال المساعدة لأساليب HTTP
يوفّر Vapor دالة مساعدة لكل فعل من أفعال HTTP: app.get وapp.post وapp.put وapp.patch وapp.delete. تأخذ كل منها مكوّنات المسار ومعالجًا.
app.post("users") { req in
"Created a user"
}
app.delete("users") { req in
"Deleted a user"
}مقاطع المسار
مرّروا عدة مقاطع نصية لإنشاء مسارات متداخلة. يستجيب الاستدعاء أدناه للطلب GET /api/v1/status.
app.get("api", "v1", "status") { req in
"OK"
}معلمات المسار
استخدموا مقطعًا مسبوقًا بنقطتين لالتقاط قيمة ديناميكية. اقرأوا هذه القيمة من الطلب باستخدام req.parameters.get(_:). عند طلب /users/42 أدناه، تُلتقط القيمة 42.
app.get("users", ":id") { req -> String in
let id = req.parameters.get("id") ?? "unknown"
return "User id is " + id
}المعلمات محددة النوع
يمكنكم تحويل معلمة إلى نوع محدد بتمرير النوع إلى get. وإذا فشل التحويل، يعيد Vapor تلقائيًا استجابة 404، مما يحافظ على بساطة المعالجات.
app.get("posts", ":id") { req -> String in
let id = try req.parameters.require("id", as: Int.self)
return "Post number " + String(id)
}معلمات الاستعلام
اقرأوا عناصر استعلام عنوان URL عبر req.query. بالنسبة إلى /search?term=swift، يمكنكم فك ترميز قيمة term مباشرة. وتعود القيم الاختيارية المفقودة ببساطة على هيئة nil.
app.get("search") { req -> String in
let term = try req.query.get(String.self, at: "term")
return "Searching for " + term
}مجموعات المسارات
جمّعوا المسارات المرتبطة ضمن بادئة مشتركة باستخدام app.grouped(...). يجنّبكم ذلك تكرار مكوّنات المسار ويحافظ على تجميع نقاط النهاية المرتبطة معًا.
let users = app.grouped("users")
users.get { req in "List users" } // GET /users
users.post { req in "Create user" } // POST /usersإرجاع أنواع مختلفة من الاستجابات
يمكن للمعالج إرجاع String أو HTTPStatus أو نوع Content مخصص أو Response مُنشأة بالكامل. يعرف Vapor كيفية ترميز كل نوع منها في استجابة HTTP.
app.delete("cache") { req -> HTTPStatus in
// clear something
return .noContent // 204
}طرح الأخطاء باستخدام Abort
أطلقوا Abort(_:) لإيقاف معالجة الطلب وإرجاع حالة HTTP محددة وسبب اختياري. يحوّلها Vapor إلى استجابة خطأ JSON واضحة.
app.get("secret") { req -> String in
guard req.headers.first(name: "X-Key") == "open" else {
throw Abort(.forbidden, reason: "Missing key")
}
return "Welcome"
}المعالجات غير المتزامنة
يدعم Vapor 4+ بالكامل async/await. ضعوا علامة async على دالة الإغلاق الخاصة بالمعالج، واستخدموا try await داخلها لتنفيذ عمليات قاعدة البيانات أو الشبكة.
app.get("ping") { req async throws -> String in
try await Task.sleep(for: .milliseconds(10))
return "pong"
}اختبار سريع: التوجيه
تحققوا من معرفتكم بالتوجيه.
مراجعة: التوجيه ومعالجة الطلبات
يمكنكم الآن إعداد خادم Vapor:
- سجّلوا المسارات باستخدام
app.get/post/put/patch/deleteومقاطع المسار. - التقطوا القيم الديناميكية باستخدام
:paramواقرؤوها عبرreq.parameters(مع تحديد نوعها باستخدامrequire(_:as:)). - اقرؤوا عناصر الاستعلام من
req.query، واجمعوا المسارات باستخدامgrouped. - أعيدوا سلاسل نصية أو حالات أو محتوى؛ وأطلقوا
Abortللأخطاء؛ واستخدموا المعالجات غير المتزامنة.
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «التوجيه ومعالجة الطلبات» مجاني؟
نعم — نص درس «التوجيه ومعالجة الطلبات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «التوجيه ومعالجة الطلبات»؟
حدّد المسارات وعالج طلبات HTTP. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «التوجيه ومعالجة الطلبات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التوجيه ومعالجة الطلبات
- ترميز المحتوى وJSON
- ORM والنماذج في Fluent
- البرمجيات الوسيطة والمصادقة