تخطَّ إلى المحتوى

Request#

يُمرَّر الكائن Request إلى كل معالج مسار.

app.get("hello", ":name") { req -> String in
    let name = req.parameters.get("name")!
    return "Hello, \(name)!"
}

إنه النافذة الرئيسية إلى بقية وظائف Vapor. يحتوي على واجهات لـ جسم الطلب، ومُعامِلات الاستعلام (query parameters)، والمُسجِّل (logger)، وعميل HTTP، والمُصادِق (Authenticator)، والمزيد. يُبقي الوصول إلى هذه الوظائف عبر الطلب العمليات الحسابية على حلقة الأحداث (event loop) الصحيحة، ويتيح محاكاتها (mock) للاختبار. يمكنك حتى إضافة خدماتك الخاصة إلى Request عبر الامتدادات (extensions).

يمكن العثور على وثائق الواجهة الكاملة لـ Request هنا.

Application#

تحمل الخاصية Request.application مرجعًا إلى Application. يحتوي هذا الكائن على كل الإعدادات والوظائف الأساسية للتطبيق. ينبغي ضبط معظمها فقط في configure.swift، قبل بدء التطبيق بالكامل، ولن تُحتاج العديد من الواجهات منخفضة المستوى في معظم التطبيقات. من أكثر الخصائص فائدة Application.eventLoopGroup، التي يمكن استخدامها للحصول على EventLoop للعمليات التي تحتاج إلى واحدة جديدة عبر الطريقة any(). كما يحتوي على Environment.

Body#

إذا كنت تريد وصولًا مباشرًا إلى جسم الطلب كـ ByteBuffer، يمكنك استخدام Request.body.data. يمكن استخدام هذا لبثّ (streaming) البيانات من جسم الطلب إلى ملف (رغم أنه ينبغي عليك استخدام الخاصية fileio على الطلب لهذا بدلًا من ذلك) أو إلى عميل HTTP آخر.

Cookies#

بينما يكون أكثر تطبيقات ملفات تعريف الارتباط (cookies) فائدة عبر الجلسات (sessions) المدمجة، يمكنك أيضًا الوصول إلى ملفات تعريف الارتباط مباشرة عبر Request.cookies.

app.get("my-cookie") { req -> String in
    guard let cookie = req.cookies["my-cookie"] else {
        throw Abort(.badRequest)
    }
    if let expiration = cookie.expires, expiration < Date() {
        throw Abort(.badRequest)
    }
    return cookie.string
}

Headers#

يمكن الوصول إلى الكائن HTTPHeaders عبر Request.headers. يحتوي هذا على جميع الترويسات المُرسَلة مع الطلب. يمكن استخدامه للوصول إلى ترويسة Content-Type، على سبيل المثال.

app.get("json") { req -> String in
    guard let contentType = req.headers.contentType, contentType == .json else {
        throw Abort(.badRequest)
    }
    return "JSON"
}

راجع مزيدًا من الوثائق حول HTTPHeaders هنا. يضيف Vapor أيضًا عدة امتدادات إلى HTTPHeaders لتسهيل التعامل مع الترويسات الأكثر شيوعًا؛ تتوفّر قائمة هنا

عنوان IP#

يمكن الوصول إلى SocketAddress الذي يمثّل العميل عبر Request.remoteAddress، وقد يكون مفيدًا للتسجيل (logging) أو تحديد المعدّل (rate limiting) باستخدام التمثيل النصّي Request.remoteAddress.ipAddress. قد لا يمثّل عنوان IP الخاص بالعميل بدقّة إذا كان التطبيق خلف وكيل عكسي (reverse proxy).

app.get("ip") { req -> String in
    return req.remoteAddress.ipAddress
}

راجع مزيدًا من الوثائق حول SocketAddress هنا.

تحرير هذه الصفحة