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

🔍 スキーマ

schemaはデータの形状を形成し、バリデーションを提供します。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, // 追加プロパティを許可
-- snap --
}

4️⃣ バリデーションエラー

必須フィールドが欠落しているか無効な場合、スキーマバリデーションはリクエストがhandlersに到達する前にエラーをスローします:

// 必須フィールドが欠落
{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'status'"
]
}
}

➡️ 次へ

Validator »を学習して、データをチェックする方法を確認してください。