0Pricing
Swift Academy · Lección

API con ámbito y patrones de legibilidad

Aplique scoped APIs y patrones de nombres para DSL: tokens de espacio de nombres, agrupe con helpers y mantenga los bloques pequeños y explícitos.

API con ámbito y patrones de legibilidad es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.

¿Por qué delimitar el alcance de un DSL?

Los DSL legibles limitan lo que se puede hacer dentro de un bloque y nombran las cosas con claridad. Use espacios de nombres, pequeños auxiliares y agrupaciones para que la intención sea evidente.

Patrón de espacio de nombres

Colocar los elementos bajo R reduce la superficie y evita conflictos con los símbolos de la aplicación; las llamadas siguen siendo breves y fáciles de leer.

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)") }

Auxiliar de agrupación

Use un pequeño auxiliar de agrupación para añadir contexto (prefijo, etiquetas) sin repetirse; el bloque se mantiene ordenado.

// 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

Separación de responsabilidades

Prefiera constructores pequeños para responsabilidades separadas (rutas frente a middlewares). Cada bloque expone únicamente lo que necesita.

// 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))

Consejos de legibilidad

Patrones:

  • Use verbos cortos: GET, POST, auth.
  • Mantenga una acción por línea.
  • Prefiera bloques planos; anide solo para añadir contexto.
  • Proporcione etiquetas explícitas en los auxiliares (por ejemplo, prefix:).

Auxiliar de validación

Proporcione pequeños auxiliares de validación para mantener correctos los bloques. Falle rápidamente con mensajes útiles.

// 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)")

Patrón de API delimitada

Comprobación rápida: ¿Qué opción hace que un bloque DSL sea más seguro y claro?

Resumen

Resumen: Delimite el alcance de su DSL con espacios de nombres, use pequeños auxiliares de agrupación, mantenga los bloques enfocados y valide pronto para obtener código más seguro y legible.

Preguntas frecuentes

¿La lección «API con ámbito y patrones de legibilidad» es gratis?

Sí — el texto completo de «API con ámbito y patrones de legibilidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.

¿Qué aprenderé en «API con ámbito y patrones de legibilidad»?

Aplique scoped APIs y patrones de nombres para DSL: tokens de espacio de nombres, agrupe con helpers y mantenga los bloques pequeños y explícitos. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «API con ámbito y patrones de legibilidad»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Crear mini-DSL con result builders
  2. API con ámbito y patrones de legibilidad
  3. Ejemplos prácticos sin frameworks de UI
← Volver a Swift Academy