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.
Desafio
FácilEdite 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
1Recursos e verbos
Recursos e URLsCriando com POST4Navegadores, versões e configuração
O que é uma origemPermitindo outra origemCORSUma página que chama a API2Validação e erros
Validando a entradaPratique por conta própria: Playground de Express