2017-08-15 22 views
0

の体はこのようになります。いずれかのように、私のログインエンドポイントは「社会」のログインおよび「ユーザー」のログインを持つことができます:私はJSONスキーマ、oneOfの検証

authentication: { 
    provider: 'facebook', 
    token: 'abcd' 
} 

user: { 
    email: '[email protected]', 
    password: 'test' 
} 

またはこのような最初の本文または2番目の本文のいずれかを検証するJSONスキーマを作成します。私はoneOfにつまずいた、これは私が試したものです:

body: { 
     oneOf: [{ 
      properties: { 
      user: { 
       type: 'object', 
       required: [ 
       'email', 
       'password' 
       ], 
       email: { 
       type: 'string', 
       format: 'email' 
       }, 
       password: { 
       type: 'string', 
       minLength: 6, 
       maxLength: 32 
       } 
      }, 
      } 
     }, { 
      properties: { 
      authentication: { 
       type: 'object', 
       required: [ 
       'provider', 
       'token' 
       ], 
       provider: { 
       type: 'string', 
       enum: ['facebook'] 
       }, 
       token: { 
       type: 'string' 
       } 
      } 
      } 
     }] 
     } 

しかし私は次のエラーを与えること:誰がためにJSONスキーマの設定を行うことで私を助けることができるかどう

{ 
     "keyword": "oneOf", 
     "dataPath": ".body", 
     "schemaPath": "#/properties/body/oneOf", 
     "params": {}, 
     "message": "should match exactly one schema in oneOf" 
    } 

は素晴らしいだろうこの。ありがとう

+0

検証しませんスキーマに対して検証されています有効なJSONでさえない修正してください。 –

答えて

2

oneOfでこれを行うことができます。私は別にそれを使用しますが。これにより

{ 
    "$schema": "http://json-schema.org/schema#", 
    "type": "object", 
    "properties": { 
    "login": { 
     "oneOf": [ 
     { 
      "required": [ 
      "user" 
      ] 
     }, 
     { 
      "required": [ 
      "authentication" 
      ] 
     } 
     ], 
     "type": "object", 
     "properties": { 
     "user": { 
      "type": "object", 
      "properties": { 
      "email": { 
       "type": "string" 
      }, 
      "password": { 
       "type": "string" 
      } 
      } 
     }, 
     "authentication": { 
      "type": "object", 
      "properties": { 
      "email": { 
       "type": "string" 
      }, 
      "password": { 
       "type": "string" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

、2つのJSONを使用すると、1つでそれらの両方を置くしようとした場合

{ 
    "login": { 
    "authentication": { 
     "provider": "facebook", 
     "token": "abcd" 
    } 
    } 
} 

{ 
    "login": { 
    "user": { 
     "email": "[email protected]", 
     "password": "test" 
    } 
    } 
} 

しかし、それはあなたのスキーマがある

{ 
    "login": { 
    "authentication": { 
     "provider": "facebook", 
     "token": "abcd" 
    }, 
    "user": { 
     "email": "[email protected]", 
     "password": "test 
    } 
    } 
} 
関連する問題