📐 スキーマ
スキーマは、データの形状を形成し、検証を提供します。NodeBlocksは、言語に依存せず、ツールに適したJSON Schema Draft-07に依存しています。スキーマを定義するために、withSchemaプリミティブ関数を使用します。
1️⃣ アナトミー
src/schemas/review.ts
import { primitives } from '@nodeblocks/backend-sdk';
const { withSchema } = primitives;
const reviewIdPathParameter: primitives.OpenAPIParameter = {
in: 'path',
name: 'reviewId',
required: true,
schema: {
type: 'string',
},
};
export const reviewSchema: primitives.SchemaDefinition = {
$schema: 'http://json-schema.org/draft-07/schema#',
additionalProperties: false,
properties: {
productId: { type: 'string' },
rating: { type: 'number', minimum: 1, maximum: 5 },
comment: { type: 'string' },
},
type: 'object',
};
export const createReviewSchema = withSchema({
requestBody: {
content: {
'application/json': {
schema: { ...reviewSchema, required: ['productId', 'rating'] },
},
},
required: true,
},
});
export const updateReviewSchema = withSchema({
parameters: [{ ...reviewIdPathParameter }],
requestBody: {
content: {
'application/json': {
schema: {
additionalProperties: false,
properties: {
comment: { type: 'string' },
},
required: [],
type: 'object',
},
},
},
required: true,
},
});
withSchema(...)
はJSON定義をラップし、実行時検証を注入します。
2️⃣ フィールド要件
必須フィールド
スキーマのrequired
配列は、どのフィールドが提供される必要があるかを決定します:
// このスキーマはproductIdとratingを必須とする
withSchema({
-- snap --
required: ['productId', 'rating'],
-- snap --
})
3️⃣ 追加プロパティ
additionalProperties
フィールドにtrue
値を指定することで、スキーマが追加の(定義されていない)プロパティを受け入れることを許可するかどうかを指定できます
{
-- snap --
additionalProperties: true, // allows additional properties
-- snap --
}
4️⃣ 検証エラー
必須フィールドが欠落または無効な場合、リクエストがハンドラーに到達する前にスキーマ検証がエラーをスローします:
// 必須フィールドが欠落
{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'status'"
]
}
}
➡️ 次へ
データをチェックする方法についてはValidator »を学習してください。