Skip to content

Respostas

Retornar um objeto já produz JSON. Nesta página tornamos status e formato de saída explícitos.

Status padrão

Sem @Status, o Empilha usa:

MétodoStatus padrão
GET, PUT, PATCH200
POST201
DELETE204

Use @Status quando o endpoint foge do padrão:

ts
import { Post, Status } from "empilha";

@Post("/preview")
@Status(200)
preview() {
  return { title: "Prévia" };
}

Schema de resposta

Complete src/schemas/task.schema.ts:

ts
import { t } from "empilha";

export const Task = t.Object({
  id: t.Integer(),
  title: t.String(),
  description: t.Optional(t.String()),
  done: t.Boolean(),
});

Use o schema na rota:

ts
import { Returns } from "empilha";
import { Task } from "../schemas/task.schema";

@Post("/")
@Returns(Task)
create(@Body(CreateTask) input: CreateTaskInput) {
  return { id: 1, ...input, done: false, internal: "não vaza" };
}

@Returns(Task):

  • documenta a resposta no OpenAPI;
  • valida o retorno fora de produção por padrão;
  • serializa somente os campos do schema.

O campo internal não aparece no JSON.

Listas

O schema deve descrever o corpo inteiro:

ts
@Get("/")
@Returns(t.Array(Task))
list() {
  return [];
}

Texto

Strings são serializadas como JSON por padrão. Para texto simples:

ts
import { Produces } from "empilha";

@Get("/status")
@Produces("text/plain")
status() {
  return "ok";
}

Entrada e saída agora têm contrato

O controller já sabe receber e responder. No próximo capítulo, a regra de negócio sai dele e vai para um service.

Feito para APIs que continuam simples quando crescem.