JSONスキーマ

Qmonus SDKで利用するjsonschemaを共通化できるサービスです。登録したjsonschemaは、API GatewayのAPIルーティングの入出力仕様やScenariorequest_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'}
>>>