opis / json-schema

JSON Schema validator for PHP
https://opis.io/json-schema
Apache License 2.0
560 stars 56 forks source link

Example of Openapi not valid #103

Open rejinka opened 2 years ago

rejinka commented 2 years ago

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()));
gskema commented 2 years ago

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.

karenetheridge commented 1 year ago

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.