JSON ハイパースキーマ Draft-06 リリースノート

draft-luff-json-hyper-schema-00 (draft-04) から draft-wright-json-schema-hyperschema-01 (draft-06) への移行に関するリリースノート。

注意: draft-07 がリリースされました

draft-07 の移行ノートでは、draft-04 から draft-07 への移行について、draft-05 および draft-06 の複雑な中間状態をスキップすることで、より直接的な概要を提供しています。このページは歴史的な関心のために保持されていますが、最新のドラフトをすぐに使用したい場合には推奨されません。

実装者向け: draft-06 以前ではなく、draft-07 を実装することを推奨します。

Q: draft-04 と draft-06 の間にはどのような非互換な変更がありますか?

draft 04 と 06 の間で、ハイパースキーマの大幅な再検討を行いました。ハイパースキーマは、JSON スキーマ検証ほど広く採用されていませんでした。

draft-06 にはまだ大きなギャップがあることは承知していましたが、フィードバックを収集するための適切な変更セットだと感じました。draft-07 が公開されたので、そのドラフト以降を使用する必要があり、draft-06 は歴史的な関心事になります。

draft-04 から draft-05 への変更

キーワード変更結果
"base""href" のベース URI を決定するために、最も近い "self" リンクを検索する代わりに利用ベースを変更するために "self" リンクに依存していた場合は、"base" を明示的に設定してください
"rel""full" 関係が削除されました"item" を使用
"rel""instances" および "create" 関係が削除されました"collection" を使用
"rel""root" 関係が削除されました"href" URI テンプレートでフラグメントを使用してください
"fragmentResolution"削除されましたメディアタイプがフラグメントの解釈方法を決定します
"pathStart"削除されました[代替なし]
"method"HTML フォームセマンティクス の "get" と "post" に戻りました。これは、すべての HTTP メソッドではなくなりました[混乱を招くというフィードバックにより、draft-06 で再度変更されました]

draft-05 から draft-06 への変更

キーワード変更結果
"method"削除されましたHTTP メソッドの提案については、#73 および #296 を参照してください(必要に応じて、拡張キーワードとして "method" または "allow" のいずれかを使用してください)。"schema" および "encType" の使用方法を示す必要はなくなりました
"schema"削除されました"hrefSchema""submissionSchema"、または "targetSchema" を使用してください
"encType"削除されましたリクエストボディには "submissionEncType" を使用してください。URI クエリ文字列には不要になりました
"hrefSchema"追加されました"method": "get", "schema": {...} を置き換え、追加機能も備えています
"submissionSchema"追加されましたは、"method": "post", "schema": {...} を置き換えます。
"submissionEncType"追加されましたは、"method": "post", "encType": "..." を置き換えます。
"href"プリプロセッシングで削除されました。今後の草案で置き換えられ、拡張される予定です。

"targetSchema" の適切な使用法

"targetSchema" は最近のどちらの草案でも意味が変わっていませんが、広く誤解されてきました。そのため、指定されたとおりに使用すると変更のように感じるかもしれません。

draft-04 では、個々の HTTP メソッドを "method" 値として強調していたため、多くのユーザーが "targetSchema""method" におけるメソッドへの応答のヒントとして解釈しました。これは決して正しい解釈ではありませんでした。すべての草案でこのキーワードは、HTTP GET への応答として表示されるターゲットリソースの表現を記述するものと定義されており、他の応答に表示される場合とされない場合があります。

draft-06 では、この使用法を明確にし、さまざまな HTTP メソッドでの使用に関するガイダンスを提供しています。これには、PUT および PATCH のリクエスト記述として "targetSchema" を使用することが含まれます。draft-04 では、多くのユーザーが PUT および PATCH リクエストを記述するために "schema" を使用していましたが、これは不要です。

ただし、"targetHints" 提案は draft-07 に受け入れられました。特に、「Accept-Patch」のヒントを有効にするものであり、HTTP PATCH で "targetSchema" を適切に使用するために必要です。draft-07 には例と詳細なガイダンスが記載されます。

Q: draft-06 の公開直前に、なぜ Hyper-Schema にいくつかの大きな変更が加えられたのですか?

A: 最終レビュー中に、仕様の記述どおりの使い方に関して合意がないことが明らかになりました。遅れての変更は、曖昧さのない意味を持つ仕様を公開するために必要であり、これにより、異なる解釈ではなく、内容に関するフィードバックを得ることができました。当初は、そこにあったものを単に明確にしようとしましたが、そもそもそこに何があるのかについて合意がないことに気づきました。

Q: なぜ仕様はもはや HTML のように言及したり動作したりしないのですか?

A: 既存のアナロジーは、次の 2 つの理由から、良い影響よりも悪い影響を与えるというコンセンサスに達しました。

  1. draft-03 から draft-04 への変更で、"method" が HTML の <form method="..."> の "get" および "post" 値の代わりに、任意の HTTP メソッドを示すようになったことで、HTML との元々のアナロジーが壊れてしまい、それを元に戻そうとしても受け入れられませんでした。
  2. URI クエリ文字列 (URI の他の部分ではない) またはリクエストボディのいずれかに "schema""encType" しか使用できず、両方を一度に扱う方法がないことは、API 設計にとって過度に制限的でした。

"schema" の分割

"method" に応じて "schema" が 2 つの異なることを行う代わりに、それぞれの用途に合わせて 2 つのキーワードに分割しました。これにより、HTML フォームにはないユースケースである、必要なときに両方を同時に使用できます。

"hrefSchema" は、"method": "get" の使用法を置き換えますが、URI テンプレート変数を活用することで、クライアントデータ駆動の動的 URI がクエリ文字列に限定されなくなります。このアプローチでは "encType" は不要になります。

"submissionSchema" は、"method": "post" の使用法を直接置き換え、"submissionEncType""encType" を置き換えます。

"method" の削除

draft-05 では、"method" の draft-03 の動作を復元しようとしましたが、フィードバックによると、ユーザーはその変更に非常に混乱していました。"schema" が分割されたことで、"method" の draft-05 の動作は不要になりました。

draft-04 の "method" の動作に戻すこともできましたが、何度も往復することでさらに混乱が生じるだけでなく、"method" に対する draft-04 のアプローチは、そもそも LDO 設計の他の部分と一貫性がありませんでした。特に、上記のように "targetSchema" の使用に問題を引き起こしました。

A: 理想的には、これはリンク関係タイプによって暗黙的に伝えられます。これは、一般的に機械指向ハイパーメディア全体におけるセマンティクスの主要な指標です。RFC 5988 は、カスタム (別名「拡張」) リンク関係の作成に関するガイダンスを提供しています。

urn: スキームの UUID 名前空間tag: スキームなど、いくつかの URI スキームと名前空間は、一意の識別子の作成に特に適しています。

そしてもちろん、HTTP の "Allow" レスポンスヘッダーや、メソッドを試して 405 Method Not Allowed エラーを適切に処理するなど、これを実行時に検出する方法があります。

A: "targetHints" 提案は draft-07 の一部であるため、draft-06 の拡張として使用することもできますが、現時点では draft-07 を使用することを推奨します。

Q: "targetSchema" が応答でない場合、応答を記述するにはどうすればよいですか?

A: さまざまな成功およびエラー応答に対してハイパースキーマを用意する必要がありますが、それらをリンクに接続することは、使用法に関する質問というよりもドキュメントに関する質問です。各応答は独自のスキーマを示すため、実行時に事前に知っておく必要はありません。

HTTP メソッドなどの操作に応答を明示的に関連付けるハイパースキーマのキーワードはこれまでありませんでした。これに関するユースケースは API ドキュメントの生成に関するものであると思われるため、これは JSON Schema API ドキュメント語彙の候補になる可能性が非常に高いです。

ヘルプが必要ですか?

これらのドキュメントは役に立ちましたか?

ドキュメントを改善するためにご協力ください!

JSON Schema では、他のすべての種類の貢献と同じくらいドキュメントの貢献を重視しています!

まだヘルプが必要ですか?

JSON Schema の学習は混乱することが多いですが、ご心配なく、私たちがお手伝いします!