👻
Node.jsを使って、JSON:APIに準拠しているかを検証する
概要
JSON:APIに準拠しているかを検証するにあたり、以下のリポジトリを使用してみましたので、備忘録です。
本記事執筆時点において、7年前から更新がされていないようなので、最新のスキーマ等には非対応かもしれませんが、簡単な検証は行うことができました。
使い方
上記のライブラリを試すにあたり、以下のリポジトリを用意しました。
インストール
nvm
の利用を前提していますが、必須ではありません。
git clone https://github.com/nakamura196/jsonapi-validator-demo
cd jsonapi-validator-demo
nvm i 22
nvm use 22
pnpm i
試す
OKの例
{
"jsonapi": {
"version": "1.0",
"meta": {
"links": {
"self": {
"href": "http://jsonapi.org/format/1.0/"
}
}
}
},
"data": [
{
"type": "record",
"id": "10_A0024853",
"attributes": {
"title": "サンプル"
}
}
]
}
./node_modules/jsonapi-validator/bin/jsonapi-validator.js -f ./01_valid.json
01_valid.json is valid JSON API.
NGな例:不要なプロパティあり
aaa
という不要なプロパティがあります。
{
"jsonapi": {
"version": "1.0",
"meta": {
"links": {
"self": {
"href": "http://jsonapi.org/format/1.0/"
}
}
}
},
"aaa": {
"bbb": "ccc"
},
"data": [
{
"type": "record",
"id": "10_A0024853",
"attributes": {
"title": "サンプル"
}
}
]
}
./node_modules/jsonapi-validator/bin/jsonapi-validator.js -f ./02_invalid_additional_properties.json
Invalid JSON API.
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: aaa
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: aaa
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: data
should have required property 'errors'.
schemaPath: #/required
missingProperty: errors
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: aaa
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: data
should have required property 'meta'.
schemaPath: #/required
missingProperty: meta
should match exactly one schema in oneOf.
schemaPath: #/oneOf
NGな例:必要なプロパティがない
type
という必要なプロパティがない例です。
{
"jsonapi": {
"version": "1.0",
"meta": {
"links": {
"self": {
"href": "http://jsonapi.org/format/1.0/"
}
}
}
},
"data": [
{
"id": "10_A0024853",
"attributes": {
"title": "サンプル"
}
}
]
}
./node_modules/jsonapi-validator/bin/jsonapi-validator.js -f ./03_invalid_missing_property.json
Invalid JSON API.
should be object.
schemaPath: #/type
type: object
should have required property 'type'.
schemaPath: #/required
missingProperty: type
should be null.
schemaPath: #/oneOf/2/type
type: null
should match exactly one schema in oneOf.
schemaPath: #/oneOf
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: data
should have required property 'errors'.
schemaPath: #/required
missingProperty: errors
should NOT have additional properties.
schemaPath: #/additionalProperties
additionalProperty: data
should have required property 'meta'.
schemaPath: #/required
missingProperty: meta
should match exactly one schema in oneOf.
schemaPath: #/oneOf
まとめ
JSON:APIの利用にあたり、参考になりましたら幸いです。
Discussion