1

スキーマに対してデータを検証するために justinrainbow/json-schema クラスを使用しています。ただし、次のエラーが表示されます。

Media type application/schema+json expected

すべての json ファイルに対して nginx の ContentType を変更しようとすることはできますが、意味がありません。

別の方法は、ライブラリ内の定数を「application/json」に変更することです(私のサーバーはjsonファイルを配信しているため)。繰り返しますが、ソースを変更しても問題ありません。

これをパラメーターとして justinrainbow/json-schema クラスに渡す方法はありますか?

https://github.com/justinrainbow/json-schema

4

2 に答える 2

0

Web にはスキーマ + json のようなコンテンツ タイプがないため、これに対する解決策を見つけることができませんでした。

justinrainbow/json-schema/src/JsonSchema/Validator.php の SCHEMA_MEDIA_TYPE を「application/json」に置き換えるだけです。

URL ではなく、ローカル パスでファイルを提供することもできます。

于 2015-02-18T13:04:33.917 に答える
0

現在、ライブラリは「json/application」を追加でサポートしていますが、他のコンテンツ タイプでエラーをスローします。

これを回避するには、デフォルトの「JsonSchema\Uri\UriRetriever」を拡張し、「confirmMediaType()」をオーバーライドします。

class MyUriRetriever extends JsonSchema\Uri\UriRetriever {

    public function confirmMediaType($uriRetriever, $uri) {
        return;
    }
}

$retriever = new \MyUriRetriever();

$refResolver = new JsonSchema\SchemaStorage($retriever);
$schema = $refResolver->resolveRef($schema);

$validator = new JsonSchema\Validator(new JsonSchema\Constraints\Factory($refResolver));
$validator->check($data, $schema);

$data: API からの json デコードされた応答

$schema: スキーマの URL

他のパーティの API をスキーマに対してテストするときに、同じ問題が何度も発生しました。多くの場合、スキーマの正しい「Content-Type」ヘッダーを送信せず、変更に時間がかかることがあります。

更新: 検証からエンドポイントを除外する機能

UriRetriever:addInvalidContentTypeEndpoint()を使用できます。

$retriever = new UriRetriever();
$retriever->addInvalidContentTypeEndpoint('http://example.com/car/list');
于 2016-12-27T09:16:11.767 に答える