みなさんjson schema利用していますか?
webAPIのスキーマテストをjson schemaを利用して行っているので、実装時に利用した機能のちょっとしたメモを公開します。
properties
- オブジェクト(連想配列)の唯一の名前を指定できる
- 値が一つだけの場合はこれを用いると楽
"properties": {
"/": {}
}
patternproperties
- 正規表現を用いてオブジェクト名のバリデートができる
"patternProperties": {
"^(/[^/]+)+$": {}
}
additionalProperties
- 未定義のプロパティを拒否する
- 下の例は、
"/"
と同じ階層に他のプロパティが入るとバリデートされる
"properties": {
"/": {}
},
"additionalProperties": false
type
- keyの値の型のバリデート
"type": "object"
名称 | 説明 |
---|---|
array | 配列型 |
boolean | 真偽値型 |
integer | 整数型。少数と指数部はのぞく |
number | 実数型? |
null | null型 |
object | 連想配列型 |
string | 文字列型 |
minimum
- keyの最小の値を指定
exclusiveMinimum
- minimumで指定した値を含めるのか含めないのかをbooleanで指定。
- true => 含めない
- false => 含める
- 省略可で、デフォルトはfalse
maximum
- keyの最大の値を指定
exclusiveMaximum
- maximumで指定した値を含めるのか含めないのかをbooleanで指定。
- true => 含めない
- false => 含める
- 省略可で、デフォルトはfalse
pattern
- keyの値を正規表現を用いてバリデートできる。
"type":"string"
を指定した場合のみ使用できる。 - 使用できる特殊文字が限られるので注意。例えば数値にマッチさせる
\d
は使用できない。詳しくはこちら。
"pattern": "^/dev/[^/]+(/[^/]+)*$"
required
-
properties
で定義した値の中で、必ず入っていなければならない値を選択できる。 - 下の例は、
"name"
と"email"
が必須項目で、それ以外の値はあってもなくてもバリデートされない。
{
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" },
"address": { "type": "string" },
"telephone": { "type": "string" }
},
"required": ["name", "email"]
}