Codificación de contenido y JSON
Decodifique y codifique los cuerpos de solicitudes y respuestas.
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 enCodable). - Devuelva contenido para codificar JSON; use
req.content.decodepara leer cuerpos. - Personalice claves y fechas mediante
CodingKeysyContentConfiguration. - Valide la entrada con
Validatabley considere separar los DTO de solicitud y respuesta.
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
- Enrutamiento y gestión de solicitudes
- Codificación de contenido y JSON
- ORM y modelos con Fluent
- Middleware y autenticación