メインコンテンツまでスキップ
バージョン: 0.5.0 (最新)

📐 スキーマ

スキーマは、データの形状を形成し、検証を提供します。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 »を学習してください。