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'}
>>>