การกำหนดเส้นทางและจัดการคำขอ
กำหนดเส้นทางและจัดการคำขอ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดเส้นทางและจัดการคำขอ
- การเข้ารหัสเนื้อหาและ JSON
- ORM และโมเดลแบบ Fluent
- มิดเดิลแวร์และการยืนยันตัวตน