JSONスキーマ
Qmonus SDKで利用するjsonschemaを共通化できるサービスです。登録したjsonschema
は、API GatewayのAPIルーティングの入出力仕様やScenario
のrequest_validation
のスキーマから参照することでパラメータをバリデーションすることができます。
JSONスキーマが保有する属性
属性 | 概要 | 備考 |
---|---|---|
category |
JSONスキーマのカテゴリを指定します。 | カテゴリはJSONスキーマを分類するための単なるラベルです。 |
name |
JSONスキーマの名前を指定します。 | ユニークである必要があります。 この名前をjsonschemaの $ref で参照することで適用されます。geo.address など名前空間を意識して定義したい場合はドット区切りなども可能です。 |
schema |
JSONスキーマをを記述します。 | - |
サンプル
- シンプルなオブジェクト構造スキーマのサンプル
category: example
name: address
schema:
type: object
additionalProperties: false
properties:
city:
type: string
state:
type: string
street_address:
type: string
required:
- street_address
- city
- state
- ネストしたオブジェクト構造スキーマのサンプル
category: example
name: person
schema:
type: object
additionalProperties: false
properties:
address:
$ref: address
children:
items:
$ref: person
type: array
name:
type: string
required:
- name
動作確認
JSONスキーマの動作は、Jsonschema
組込みオブジェクトを利用して確認することができます。
>>> s = await Jsonschema.load("address")↵
... await s.validate({"street_address": "1st Street SE", "city": "Washington", "state": "DC"})↵
... ↵
↵
>>> await s.validate({"street_address": "1st Street SE", "city2": "Washington", "state": "DC"})↵
... ↵
'city' is a required property
Failed validating 'required' in schema:
{'additionalProperties': False,
'properties': {'city': {'type': 'string'},
'state': {'type': 'string'},
'street_address': {'type': 'string'}},
'required': ['street_address', 'city', 'state'],
'type': 'object'}
On instance:
{'city2': 'Washington',
'state': 'DC',
'street_address': '1st Street SE'}
>>>
>>> s = await Jsonschema.load("person")↵
... await s.validate({"name": "hoge", "street_address": "1st Street SE", "city": "Washington", "state": "DC"})↵
... ↵
↵
>>> await s.validate({"name": "hoge", "address": {"street_address": "1st Street SE", "city": "Washington", "state": "DC"}, "children": [{"name": "hoge2"}]})↵
... ↵
↵
>>> await s.validate({"name": "hoge", "address": {"street_address": "1st Street SE", "city": "Washington", "state": "DC"}, "children2": [{"name": "hoge2"}]})↵
... ↵
Additional properties are not allowed ('children2' was unexpected)
Failed validating 'additionalProperties' in schema:
{'additionalProperties': False,
'properties': {'address': {'$ref': 'address'},
'children': {'items': {'$ref': 'person'},
'type': 'array'},
'name': {'type': 'string'}},
'required': ['name'],
'type': 'object'}
On instance:
{'address': {'city': 'Washington',
'state': 'DC',
'street_address': '1st Street SE'},
'children2': [{'name': 'hoge2'}],
'name': 'hoge'}
>>>