JSONスキーマの使用については、有効なデータを記述するタスクを混乱させる(または少なくとも区別しない)格納されたデータ、および入力データの検証を行います。データ記述のためのJSONスキーマvsデータ検証vs入力検証
典型的な例は次のようになります。
var schema = {
type: 'object',
properties: {
id: { type: 'integer', required: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
これは、データストア内の有効なデータがどのように見えるかを記述するためにうまく機能し、それがでますので、それを検証するため(後者はひどく場合に便利-ではありません店舗は既に有効である必要があります)。
var storedData = {
id: 123,
name: 'orange',
description: 'delicious'
};
入力の検証にはうまくいきません。 id
は、アプリケーションが生成するために残されている可能性が高く、ユーザーが入力の一部として提供するためではありません。スキーマは、直接入力を検証するものではありません、検証が後にのみ発生する必要があり
var inputData = {
name: 'orange',
description: 'delicious'
};
ファイン、 1は言うかもしれない、:それは、スキーマを宣言id
はrequired
する欠けているため、次の入力が検証に失敗しましたアプリケーションはid
を追加し、そのデータは保存されることを意味します。スキーマは、直接入力を検証することを意図していない場合
、しかし、何が1)のJavaScriptの点は、ブラウザで実行されているバリデータ、おそらく直接入力と明らか入力指向readonly
2)点を供給されています仕様のスキーマ機能?
一度設定できるプロパティ(ユーザー名など)と異なるアクセスレベル(たとえば、管理者とオレンジのオーナーがを変更できるようにする必要がある他のユーザーの場合はreadonly
のままにしてください)。
これに対処するためのベストプラクティス(または少なくとも実用的なプラクティス)は何ですか?以下のように、各ユースケースごとに異なるスキーマ?
var baseSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
var ownerUpdateSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: false, readonly: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
var userUpdateSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: false, readonly: true },
name: { type: 'string', required: false, readonly: true },
description: { type: 'string', required: false, readonly: true }
}
};
他に何か?
「単にデータを記述している」場合は、idが必須であることを指定すると非常に便利です。私はあなたのデータを消費している場合、私はこのフィールドに依存することができることを知っている、そうでなければ私は識別子として使用するために何かを見つける必要があります。 –