0Pricing
Swift Academy · Aula

Codificação de Conteúdo e JSON

Decodifique e codifique os corpos de requisições e respostas.

Codificação de Conteúdo e JSON é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

O protocolo Content

Os modelos do Vapor que trafegam por HTTP estão em conformidade com Content. Content é construído sobre o Codable do Swift e adiciona a capacidade de decodificar corpos de requisição e codificar respostas automaticamente.

import Vapor

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

Codificando uma resposta como JSON

Retorne qualquer valor Content de um manipulador, e o Vapor o codificará em JSON, definindo automaticamente o cabeçalho Content-Type correto.

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

Decodificando o corpo de uma requisição

Leia uma carga tipada de uma requisição recebida com req.content.decode(_:). O Vapor examina o Content-Type e analisa JSON (ou dados de formulário) de acordo com o tipo.

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

Arrays como Content

Coleções de tipos Content são codificadas automaticamente como arrays JSON. Retorne [Todo], e o cliente receberá uma lista JSON.

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

Chaves de codificação personalizadas

Como Content está em conformidade com Codable, você pode mapear nomes de propriedades do Swift para chaves JSON diferentes usando CodingKeys — algo útil para APIs em snake_case.

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

Configurando o codificador JSON

Você pode definir uma estratégia global de codificação, por exemplo, convertendo todas as chaves para snake_case ou formatando datas como ISO-8601, por meio de ContentConfiguration.

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

Validando conteúdo decodificado

O protocolo Validatable do Vapor permite declarar regras de validação. Chame try Todo.validate(content: req) antes de decodificar para rejeitar entradas inválidas com um erro 400 claro.

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

Usando validação em um manipulador

Valide primeiro e depois decodifique. Se a validação falhar, o Vapor lançará um erro automaticamente, e o cliente receberá uma resposta de erro descritiva.

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

Separando DTOs de requisição e resposta

Uma boa prática é manter tipos distintos para entrada e saída. Por exemplo, um CreateTodo sem identificador para requisições e um Todo completo para respostas. Isso desacopla sua API dos modelos internos.

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

Codificando strings de consulta

O mesmo mecanismo Content decodifica strings de consulta em uma estrutura por meio de req.query.decode(_:), o que é ideal para parâmetros de filtro e paginação.

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

Retornando um status personalizado com Content

Para controlar o corpo e o status, construa uma Response e codifique o conteúdo nela ou retorne uma estrutura semelhante a uma tupla. O exemplo abaixo define o status 201 Criado com um corpo 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
}

Verificação rápida: Content e JSON

Teste seus conhecimentos sobre codificação.

Recapitulação: conteúdo e codificação JSON

Você aprendeu como os dados atravessam a rede no Vapor:

  • Coloque os modelos em conformidade com Content (construído sobre Codable).
  • Retorne conteúdo para codificar JSON; use req.content.decode para ler corpos.
  • Personalize chaves e datas por meio de CodingKeys e ContentConfiguration.
  • Valide entradas com Validatable e considere DTOs separados para requisições e respostas.

Perguntas Frequentes

A aula “Codificação de Conteúdo e JSON” é grátis?

Sim — o texto completo de “Codificação de Conteúdo e JSON” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Codificação de Conteúdo e JSON”?

Decodifique e codifique os corpos de requisições e respostas. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Codificação de Conteúdo e JSON”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Roteamento e Tratamento de Requisições
  2. Codificação de Conteúdo e JSON
  3. ORM Fluent e Modelos
  4. Middleware e Autenticação
← Voltar para Swift Academy