任意項目
CoddyのNode.jsジャーニー「REST API」セクションの一部。レッスン 9/25。
完全なタスクには、タイトルと完了値が必要です。PATCH リクエストでは、どちらか一方だけを変更できます。オブジェクトスキーマに .partial() を適用すると、存在するフィールドのルールは維持したまま、フィールドを任意にできます。
const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});省略されたタイトルは許可されますが、指定された年は引き続き数値でなければなりません。Partialを使っても、誤った値が有効な値に変わるわけではありません。元のスキーマは変更されないため、完全なリソースを置き換えるルートでは、引き続きすべてのフィールドを必須にできます。
Book.partial({ pages: true }) を使うと、pages だけが任意になり、ほかのフィールドは必須のままです。作成リクエストでは、主要なタイトルは必須のまま、デフォルト値があるフィールドを省略することがよくあります。解析後、const { pages = 1 } = result.data によって、フィールドが省略されていた場合は1が設定されます。
チャレンジ
簡単exercise.js 内の2つのスキーマ代入を編集してください。Task は完全なレコードとして保持します。PATCH 用に、ChangeTask ではフィールドの省略を許可してください。NewTask ではタイトルを必須にし、done は省略できるようにしてください。
/result に {} を POST すると、{"change":true,"create":false} が期待されます。{"title":"Read"} という本文は両方の検証に通ります。指定した値には引き続き正しい型が必要です。{"done":"false"} は両方の検証に失敗します。
最初の GET /result では、指定された例の {} が使われます。他の入力を試すには、JSON 本文を付けて POST /result を使用してください。
自分で試してみよう
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 };
}
REST APIのすべてのレッスン
自分で練習してみよう: Expressプレイグラウンド