Swift Academy · บทเรียน

API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย

ใช้ API แบบกำหนดขอบเขต และรูปแบบการตั้งชื่อสำหรับ DSL: ใช้โทเค็นเป็นเนมสเปซ จัดกลุ่มด้วยตัวช่วย และทำให้บล็อกมีขนาดเล็กและชัดเจน

บทเรียน 2 จาก 38 ขั้นตอน

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

เหตุใดจึงกำหนดขอบเขตให้ DSL

DSL ที่อ่านง่ายจะจำกัดสิ่งที่คุณทำได้ในบล็อกและตั้งชื่อสิ่งต่าง ๆ อย่างชัดเจน ใช้เนมสเปซ ตัวช่วยขนาดเล็ก และการจัดกลุ่มเพื่อให้เจตนาชัดเจน

รูปแบบเนมสเปซ

การวางโทเค็นไว้ภายใต้ R ช่วยจำกัดส่วนติดต่อและป้องกันการชนกับสัญลักษณ์ของแอป การเรียกใช้จึงสั้นและกวาดตาอ่านได้ง่าย

struct Route { let method: String; let path: String }

// Namespace instead of global free functions
enum R {
    static func GET(_ path: String) -> Route  { Route(method: "GET",  path: path) }
    static func POST(_ path: String) -> Route { Route(method: "POST", path: path) }
}

@resultBuilder
struct RoutesBuilder {
    static func buildBlock(_ parts: Route...) -> [Route] { parts }
}

func routes(@RoutesBuilder _ content: () -> [Route]) -> [Route] { content() }

let table = routes {
    R.GET("/home")
    R.POST("/upload")
}
for r in table { print("\(r.method) \(r.path)") }

ตัวช่วยจัดกลุ่ม

ใช้ตัวช่วยจัดกลุ่มขนาดเล็กเพื่อเพิ่มบริบท (prefix และแท็ก) โดยไม่ต้องเขียนซ้ำ บล็อกจึงยังคงเป็นระเบียบ

// Group routes by a shared prefix using a helper
func section(_ prefix: String, @RoutesBuilder _ content: () -> [Route]) -> [Route] {
    content().map { Route(method: $0.method, path: prefix + $0.path) }
}

let grouped = routes {
    R.GET("/health")
    section("/admin") {
        R.GET("/dashboard")
        R.POST("/upload")
    }
}
for r in grouped { print("\(r.method) \(r.path)") } // /admin/* prefixed

แยกหน้าที่

เลือกใช้ตัวสร้างขนาดเล็กสำหรับหน้าที่ที่แยกจากกัน (routes กับ middlewares) แต่ละบล็อกจะเปิดเผยเฉพาะสิ่งที่จำเป็น

// A separate builder for middlewares (keeps concerns isolated)
struct Middleware { let name: String }

@resultBuilder
struct MiddlewareBuilder {
    static func buildBlock(_ parts: Middleware...) -> [Middleware] { parts }
}

enum M {
    static func log(_ name: String) -> Middleware { Middleware(name: "log:\(name)") }
    static func auth() -> Middleware { Middleware(name: "auth") }
}

func middlewares(@MiddlewareBuilder _ content: () -> [Middleware]) -> [Middleware] { content() }

let mw = middlewares {
    M.log("requests")
    M.auth()
}
print(mw.map(\.name))

เคล็ดลับด้านความอ่านง่าย

รูปแบบ:

  • ใช้กริยาสั้น ๆ: GET, POST, auth
  • ให้มีการกระทำหนึ่งรายการต่อบรรทัด
  • เลือกใช้บล็อกแบบแบนราบ ซ้อนบล็อกเฉพาะเมื่อต้องการเพิ่มบริบท
  • ใส่ป้ายกำกับที่ชัดเจนในตัวช่วย (เช่น prefix:)

ตัวช่วยตรวจสอบ

จัดเตรียมตัวช่วยการตรวจสอบขนาดเล็กเพื่อรักษาความถูกต้องของบล็อก หยุดทันทีพร้อม messages ที่เป็นประโยชน์

// Add a simple validator to catch mistakes early
func validate(_ routes: [Route]) -> [String] {
    var issues: [String] = []
    let seen = Set(routes.map { $0.method + " " + $0.path })
    if seen.count != routes.count { issues.append("Duplicate route detected") }
    if routes.contains(where: { !$0.path.hasPrefix("/") }) {
        issues.append("Paths must start with /")
    }
    return issues
}

let issues = validate(grouped)
print(issues.isEmpty ? "OK" : "Issues: \(issues)")

รูปแบบส่วนติดต่อที่กำหนดขอบเขต

ตรวจสอบสั้น ๆ: ตัวเลือกใดทำให้บล็อก DSL ปลอดภัยและชัดเจนยิ่งขึ้น

ทบทวน

ทบทวน: กำหนดขอบเขตให้ DSL ด้วยเนมสเปซ ใช้ตัวช่วยจัดกลุ่มขนาดเล็ก ทำให้บล็อกมุ่งเน้นเฉพาะจุด และเรียกใช้ validate ตั้งแต่เนิ่น ๆ เพื่อให้โค้ดปลอดภัยและอ่านง่ายขึ้น

เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

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

บทเรียน “API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย”

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

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

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

บทเรียน “API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การสร้าง DSL ขนาดเล็กด้วย result builders
  2. API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย
  3. ตัวอย่างเชิงปฏิบัติโดยไม่ใช้เฟรมเวิร์ก UI
← กลับไปที่ Swift Academy