การเข้ารหัสเนื้อหาและ JSON
ถอดรหัสและเข้ารหัสเนื้อหาของคำขอและการตอบกลับ
การเข้ารหัสเนื้อหาและ JSON เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
โพรโทคอลเนื้อหา
โมเดลของ Vapor ที่ส่งผ่าน HTTP จะสอดคล้องกับ Content โดย Content สร้างต่อยอดจาก Codable ของ Swift และเพิ่มความสามารถในการถอดรหัสจากเนื้อหาคำขอและเข้ารหัสเป็นการตอบกลับโดยอัตโนมัติ
import Vapor
struct Todo: Content {
var id: Int?
var title: String
var done: Bool
}การเข้ารหัสการตอบกลับเป็น JSON
ส่งคืนค่า Content ใดก็ได้จากตัวจัดการ แล้ว Vapor จะเข้ารหัสค่าเป็น JSON พร้อมกำหนดส่วนหัว Content-Type ที่ถูกต้องให้โดยอัตโนมัติ
app.get("todo") { req -> Todo in
Todo(id: 1, title: "Learn Vapor", done: false)
}การถอดรหัสเนื้อหาคำขอ
อ่านข้อมูลที่ส่งเข้ามาตามชนิดจากคำขอที่เข้ามาด้วย req.content.decode(_:) Vapor จะตรวจสอบ Content-Type และแยกวิเคราะห์ JSON (หรือข้อมูลแบบฟอร์ม) ให้สอดคล้องกัน
app.post("todo") { req -> Todo in
let incoming = try req.content.decode(Todo.self)
return incoming
}อาร์เรย์ในฐานะเนื้อหา
กลุ่มข้อมูลชนิด Content จะถูกเข้ารหัสเป็นอาร์เรย์ JSON โดยอัตโนมัติ ส่งคืน [Todo] แล้วไคลเอนต์จะได้รับรายการ JSON
app.get("todos") { req -> [Todo] in
[Todo(id: 1, title: "A", done: false),
Todo(id: 2, title: "B", done: true)]
}คีย์การเข้ารหัสที่กำหนดเอง
เนื่องจาก Content เป็น Codable คุณจึงจับคู่ชื่อคุณสมบัติของ Swift กับคีย์ JSON อื่นได้โดยใช้ CodingKeys ซึ่งมีประโยชน์สำหรับ API ที่ใช้ชื่อแบบคั่นคำด้วยขีดล่าง
struct User: Content {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}การกำหนดค่าเครื่องมือเข้ารหัส JSON
คุณสามารถกำหนดกลยุทธ์การเข้ารหัสทั่วทั้งแอป เช่น เปลี่ยนคีย์ทั้งหมดเป็นรูปแบบชื่อที่คั่นคำด้วยขีดล่าง หรือจัดรูปแบบวันที่เป็น ISO-8601 ผ่าน ContentConfiguration ได้
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)การตรวจสอบเนื้อหาที่ถอดรหัสแล้ว
โพรโทคอล Validatable ของ Vapor ช่วยให้คุณประกาศกฎการตรวจสอบได้ เรียกใช้ try Todo.validate(content: req) ก่อนถอดรหัส เพื่อปฏิเสธข้อมูลขาเข้าที่ไม่ถูกต้องพร้อมข้อผิดพลาด 400 ที่ชัดเจน
extension Todo: Validatable {
static func validations(_ v: inout Validations) {
v.add("title", as: String.self, is: !.empty)
}
}การใช้การตรวจสอบในตัวจัดการ
ตรวจสอบก่อน แล้วจึงถอดรหัส หากการตรวจสอบล้มเหลว Vapor จะส่งข้อผิดพลาดโดยอัตโนมัติ และไคลเอนต์จะได้รับการตอบกลับข้อผิดพลาดที่อธิบายรายละเอียด
app.post("todo") { req -> Todo in
try Todo.validate(content: req)
return try req.content.decode(Todo.self)
}การแยก DTO ของคำขอและการตอบกลับ
แนวปฏิบัติที่ดีคือการใช้ชนิดข้อมูลแยกกันสำหรับข้อมูลขาเข้าและข้อมูลขาออก ตัวอย่างเช่น ใช้ CreateTodo ที่ไม่มี id สำหรับคำขอ และใช้ Todo แบบเต็มสำหรับการตอบกลับ วิธีนี้ทำให้ API ไม่ผูกติดกับโมเดลภายใน
struct CreateTodo: Content {
var title: String
}
struct TodoResponse: Content {
var id: Int
var title: String
}การเข้ารหัสสตริงคำค้นหา
กลไก Content แบบเดียวกันสามารถถอดรหัสสตริงคำค้นหาเป็นโครงสร้างผ่าน req.query.decode(_:) ได้ เหมาะอย่างยิ่งสำหรับพารามิเตอร์การกรองและการแบ่งหน้า
struct Page: Content {
var page: Int?
var size: Int?
}
app.get("items") { req -> String in
let p = try req.query.decode(Page.self)
return "page=" + String(p.page ?? 1)
}การส่งคืนสถานะที่กำหนดเองพร้อมเนื้อหา
หากต้องการควบคุมทั้งเนื้อหาและสถานะ ให้สร้าง Response แล้วเข้ารหัสเนื้อหาลงในนั้น หรือส่งคืนโครงสร้างคล้ายทูเพิล ตัวอย่างด้านล่างกำหนดสถานะ 201 (สร้างแล้ว) พร้อมเนื้อหา JSON
app.post("todo") { req -> Response in
let todo = try req.content.decode(Todo.self)
let res = Response(status: .created)
try res.content.encode(todo)
return res
}ตรวจสอบอย่างรวดเร็ว: เนื้อหาและ JSON
ตรวจสอบความรู้เกี่ยวกับการเข้ารหัสของคุณ
สรุป: การเข้ารหัสเนื้อหาและ JSON
คุณได้เรียนรู้แล้วว่าข้อมูลเดินทางผ่านเครือข่ายใน Vapor อย่างไร:
- ทำให้โมเดลสอดคล้องกับ
Contentซึ่งสร้างบนCodable - ส่งคืนเนื้อหาเพื่อเข้ารหัสเป็น JSON และใช้
req.content.decodeเพื่ออ่านเนื้อหาคำขอ - ปรับแต่งคีย์และวันที่ผ่าน
CodingKeysและContentConfiguration - ตรวจสอบข้อมูลขาเข้าด้วย
Validatableและพิจารณาใช้ DTO ของคำขอและการตอบกลับแยกกัน
คำถามที่พบบ่อย
บทเรียน “การเข้ารหัสเนื้อหาและ JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเข้ารหัสเนื้อหาและ JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสเนื้อหาและ JSON”
ถอดรหัสและเข้ารหัสเนื้อหาของคำขอและการตอบกลับ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเข้ารหัสเนื้อหาและ JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดเส้นทางและจัดการคำขอ
- การเข้ารหัสเนื้อหาและ JSON
- ORM และโมเดลแบบ Fluent
- มิดเดิลแวร์และการยืนยันตัวตน