Swift Academy · Lección

Codificación de contenido y JSON

Decodifique y codifique los cuerpos de solicitudes y respuestas.

Lección 2 de 413 pasos

Codificación de contenido y JSON es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. 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 4 lecciones en total.

El protocolo Content

Los modelos de Vapor que se transmiten mediante HTTP conforman Content. Content se basa en el Codable de Swift y añade la capacidad de decodificar cuerpos de solicitudes y codificarlos automáticamente en respuestas.

import Vapor

struct Todo: Content {
    var id: Int?
    var title: String
    var done: Bool
}

Codificación de una respuesta como JSON

Devuelva cualquier valor Content desde un controlador y Vapor lo codificará como JSON, configurando por usted el encabezado Content-Type correcto.

app.get("todo") { req -> Todo in
    Todo(id: 1, title: "Learn Vapor", done: false)
}

Decodificación del cuerpo de una solicitud

Lea una carga útil tipada de una solicitud entrante con req.content.decode(_:). Vapor examina Content-Type y analiza JSON (o datos de formulario) según corresponda.

app.post("todo") { req -> Todo in
    let incoming = try req.content.decode(Todo.self)
    return incoming
}

Matrices como Content

Las colecciones de tipos Content se codifican automáticamente como matrices JSON. Devuelva [Todo] y el cliente recibirá una lista JSON.

app.get("todos") { req -> [Todo] in
    [Todo(id: 1, title: "A", done: false),
     Todo(id: 2, title: "B", done: true)]
}

Claves de codificación personalizadas

Como Content es Codable, puede asignar nombres de propiedades de Swift a distintas claves JSON mediante CodingKeys, lo que resulta útil para APIs con snake_case.

struct User: Content {
    var firstName: String
    enum CodingKeys: String, CodingKey {
        case firstName = "first_name"
    }
}

Configuración del codificador JSON

Puede establecer una estrategia de codificación global, por ejemplo, convertir todas las claves a snake_case o dar formato a las fechas como ISO-8601, mediante ContentConfiguration.

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)

Validación del contenido decodificado

El protocolo Validatable de Vapor permite declarar reglas de validación. Llame a try Todo.validate(content: req) antes de decodificar para rechazar entradas incorrectas con un error 400 claro.

extension Todo: Validatable {
    static func validations(_ v: inout Validations) {
        v.add("title", as: String.self, is: !.empty)
    }
}

Uso de la validación en un controlador

Valide primero y después decodifique. Si la validación falla, Vapor lanza el error automáticamente y el cliente recibe una respuesta de error descriptiva.

app.post("todo") { req -> Todo in
    try Todo.validate(content: req)
    return try req.content.decode(Todo.self)
}

Separación de DTO de solicitud y respuesta

Una buena práctica consiste en mantener tipos distintos para la entrada y la salida. Por ejemplo, un CreateTodo sin id para las solicitudes y un Todo completo para las respuestas. Esto desacopla su API de los modelos internos.

struct CreateTodo: Content {
    var title: String
}
struct TodoResponse: Content {
    var id: Int
    var title: String
}

Codificación de cadenas de consulta

El mismo mecanismo de Content decodifica cadenas de consulta en una estructura mediante req.query.decode(_:), ideal para parámetros de filtrado y paginación.

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

Devolución de un estado personalizado con Content

Para controlar tanto el cuerpo como el estado, construya una Response y codifique el contenido en ella, o devuelva una construcción similar a una tupla. El ejemplo siguiente establece 201 Created con un cuerpo 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
}

Comprobación rápida: Content y JSON

Compruebe sus conocimientos sobre codificación.

Resumen: Content y codificación JSON

Ha aprendido cómo atraviesan los datos la red en Vapor:

  • Haga que los modelos conformen a Content (basado en Codable).
  • Devuelva contenido para codificar JSON; use req.content.decode para leer cuerpos.
  • Personalice claves y fechas mediante CodingKeys y ContentConfiguration.
  • Valide la entrada con Validatable y considere separar los DTO de solicitud y respuesta.
Gratis para empezar

Aprende Swift con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
122
Lecciones
409

Preguntas frecuentes

¿La lección «Codificación de contenido y JSON» es gratis?

Sí — el texto completo de «Codificación de contenido y JSON» 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 4 lecciones en total.

¿Qué aprenderé en «Codificación de contenido y JSON»?

Decodifique y codifique los cuerpos de solicitudes y respuestas. 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 4.

¿Cuánto tiempo toma la lección «Codificación de contenido y JSON»?

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. Enrutamiento y gestión de solicitudes
  2. Codificación de contenido y JSON
  3. ORM y modelos con Fluent
  4. Middleware y autenticación
← Volver a Swift Academy