RunKit + npm: ajv

node v8.17.0
endpointsharetweet
var Ajv = require('ajv'); var ajv = new Ajv(); var schema = { "paths": { "/users": { "get": { "security": [ { "3_legged": [ "userprofile-search" ] } ], "parameters": [ { "$ref": "#/parameters/IdentitiesId" }, { "$ref": "#/parameters/IdDocumentValue" }, { "$ref": "#/parameters/IdDocumentType" } ], "responses": { "200": { "headers": { "x-correlator": { "type": "string", "format": "uuid", } }, "schema": { "type": "array", "items": { "$ref": "#/definitions/UserProfile" } } } } } }, "/users/{user_id}": { "get": { "security": [ { "3_legged": [ "userprofile-read" ] } ], "tags": [ "users" ], "operationId": "getUserProfileInfo", "parameters": [ { "$ref": "#/parameters/UserId" } ], "responses": { "200": { "description": "OK", "headers": { "x-correlator": { "type": "string", "format": "uuid", "description": "Correlation id" } }, "schema": { "$ref": "#/definitions/UserProfile" }, "examples": { "application/json": { "id": "A000-0000-0001", "name": "Andrés Iniesta", "id_document": { "country": "ES", "type": "NIF", "value": "value" }, "identities": [ { "type": "email", "id": "id", "services": [ "iptv", "email" ] }, { "type": "phone_number", "id": "id", "services": [ "mobile" ] }, { "type": "phone_number", "id": "id", "services": [ "mobile" ] }, { "type": "phone_number", "id": "id", "services": [ "landline", "broadband" ] } ] } } } } } } }, "definitions": { "UserProfile": { "type": "object", "required": [ "id", "name", "identities" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "id_document": { "$ref": "common.json#/definitions/IdDocument" }, "identities": { "type": "array", "items": { "$ref": "#/definitions/Identity" } } } }, "Identity": { "type": "object", "required": [ "id", "services", "type" ], "properties": { "type": { "type": "string", "enum": [ "phone_number", "email", "uid" ] }, "services": { "type": "array", "items": { "type": "string", "enum": [ "mobile", "invoicing" ] } }, "id": { "type": "string" } } } } } var common = { "definitions": { "MoneyAmount": { "type": "object", "properties": { "amount": { "type": "number" } } }, "IdDocument": { "type": "object", "required": [ "country", "type", "value" ], "properties": { "country": { "type": "string" }, "type": { "type": "string" }, "value": { "type": "string" } } } } } var response={ "id": "123456789", "name": "pruebas trocafone prepago", "id_document": { "country": "ARG", "type": "P", "value": "15042016" }, "identities": [ { "type": "uid", "services": [ "invoicing" ], "id": "511644813" }, { "type": "phone_number", "services": [ "mobile" ], "id": "00123456789" }, { "type": "email", "services": [ "email" ], "id": "" } ] } ajv.addSchema(schema.definitions.UserProfile, 'user_profile.json'); ajv.addSchema(common, 'common.json'); var testajv = ajv.compile({ $ref: 'common.json#/definitions/IdDocument' }); console.log(testajv(response), ajv.errorsText(testajv.errors));
Created from: https://npm.runkit.com/ajv
Loading…