Menu
CoddyTech

Campos opcionais

Parte da seção APIs REST do Journey de Node.js da Coddy. Lição 9 de 25.

Uma tarefa completa precisa de um título e de um valor de conclusão. Uma solicitação PATCH pode alterar apenas um deles. Chamar .partial() em um esquema de objeto torna seus campos opcionais, mantendo as regras para quaisquer campos que estejam presentes.

const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});

A ausência do título é permitida, mas o ano informado ainda precisa ser um número. O método partial não transforma valores incorretos em valores válidos. O esquema original permanece inalterado, então uma rota que substitui um recurso completo pode continuar exigindo todos os campos.

Book.partial({ pages: true }) torna apenas pages opcional; os outros campos continuam obrigatórios. Uma solicitação de criação costuma omitir um campo que tem um valor padrão, mas ainda exige o título principal. Após a análise, const { pages = 1 } = result.data fornece 1 quando o campo é omitido.

challenge icon

Desafio

Fácil

Edite as duas atribuições de esquema em exercise.js. Mantenha Task como o registro completo. Faça com que ChangeTask aceite campos omitidos em PATCH. Faça com que NewTask exija um título, mas permita que done seja omitido.

Envie {} por POST para /result: espere {"change":true,"create":false}. Um corpo com {"title":"Read"} passa em ambas. Os valores fornecidos ainda precisam ter o tipo correto: {"done":"false"} falha em ambas.

A solicitação inicial GET /result usa o exemplo fornecido {}. Use POST /result com um corpo JSON para testar outras entradas.

Experimente você mesmo

import { z } from 'zod';
const Task = z.object({ title: z.string(), done: z.boolean() });
const ChangeTask = Task;
const NewTask = Task;
export function exercise(body) {
    return { change: ChangeTask.safeParse(body).success, create: NewTask.safeParse(body).success };
}

Todas as lições de APIs REST

Pratique por conta própria: Playground de Express