0Pricing
Swift Academy · บทเรียน

การกำหนดเส้นทางและจัดการคำขอ

กำหนดเส้นทางและจัดการคำขอ HTTP

การกำหนดเส้นทางและจัดการคำขอ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

Vapor คืออะไร

Vapor เป็นเฟรมเวิร์กเว็บ Swift ฝั่งเซิร์ฟเวอร์ยอดนิยมที่สร้างบน SwiftNIO ช่วยให้คุณเขียนระบบเบื้องหลัง HTTP ทั้ง API และเว็บไซต์ด้วย Swift ได้ทั้งหมด โดยใช้ภาษาเดียวกันและยังใช้โมเดลร่วมกับแอป iOS ได้ด้วย

import Vapor

let app = try await Application.make(.detect())

แอปพลิเคชันและเส้นทาง

ออบเจ็กต์ 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 ได้โดยตรง หากไม่มีค่าที่เป็นตัวเลือก ค่าที่ได้จะเป็นค่าว่างโดยอัตโนมัติ

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 อย่างสมบูรณ์ กำหนดให้คลอเชอร์ตัวจัดการทำงานแบบอะซิงก์ แล้วใช้ 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 สำหรับข้อผิดพลาด และใช้ตัวจัดการแบบอะซิงก์

คำถามที่พบบ่อย

บทเรียน “การกำหนดเส้นทางและจัดการคำขอ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดเส้นทางและจัดการคำขอ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเส้นทางและจัดการคำขอ”

กำหนดเส้นทางและจัดการคำขอ HTTP คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดเส้นทางและจัดการคำขอ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดเส้นทางและจัดการคำขอ
  2. การเข้ารหัสเนื้อหาและ JSON
  3. ORM และโมเดลแบบ Fluent
  4. มิดเดิลแวร์และการยืนยันตัวตน
← กลับไปที่ Swift Academy