opis/json-schema

Example of Openapi not valid

rejinka opened this issue · 2 comments

I tried to validate one of the examples provided in https://github.com/OAI/OpenAPI-Specification and it does not validate. The validation error doesn't seem correct to me:

Array
(
    [/webhooks/newPet/post/requestBody/content/application~1json/schema] => Array
        (
            [0] => The required properties (openapi) are missing
        )

)

Here is a small script to reproduce the error:

<?php
declare(strict_types = 1);

require_once __DIR__ . '/vendor/autoload.php';

use Opis\JsonSchema\Validator;
use Opis\JsonSchema\Errors\ErrorFormatter;

$schema = file_get_contents('https://spec.openapis.org/oas/3.1/schema/2021-09-28');
$data   = json_decode(
    file_get_contents(
        'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/f1adc846131b33be72df6a0c87e5e5da59dde0ff/examples/v3.1/webhook-example.json'
    )
);

$result = (new Validator())
    ->validate($data, $schema);

print_r((new ErrorFormatter())->format($result->error()));

I have the same problem, was playing around with changing oas3.1 schema.
Changed "schema": { "$dynamicRef": "#meta" } to "schema": { "$ref": "#/$defs/schema" } and the changed the definition to "schema": { "$ref": "https://json-schema.org/draft/2020-12/schema" }. After that there were some problem with conditional properties that have default: false, so I removed them and it works.

My use case: I have a lot of endpoints, parameters, servers which are compiled into one final OAS object JSON file which I would like to check against the OAS schema, including any sub (JSON) schemas for parameters, responses, because each bit is written manually and there might be some human mistakes.

it sounds like your evaluator doesn't support the $dynamicRef keyword. Support for that isn't optional, as it's a core part of the specification -- so you might want to file a bug report for that.