5

私はjsonの初心者です。RESTful APIの結果(つまりJSON)の形式を定義している間、それを自分のJSONスキーマとして文書化する方が簡単だと感じました。1つを書いている間、私はいくつかの質問をしました:

  1. 結果のJSONで、確認するスキーマにURIを指定するにはどうすればよいですか?--編集--属性を使用して$schemaいますか?
  2. JSONスキーマのバージョン管理に関する規則/ガイドラインはありますか?スキーマ内で属性として定義する必要がある/定義できる属性はありますか?JSONスキーマ自体には、キーの値として指定されたURIを除いて、バージョンが定義されていないことがわかります$schema
  3. 1つの大きなJSONスキーマを複数の小さなスキーマに分割し、1つを別のスキーマに含めることはできますか?C ++の#includeのように、結果としてユーザーに送信したJSON内の複数のスキーマを参照します。
  4. キー「タイプ」のカスタム値を定義できますか?たとえば、「日付」の定義を次のように再利用したいと思います。

[この行は無視してください。次のjsonでフォーマットを機能させるためです。]

{
    "date":{
        "type":"object",
        "properties":{
            "month":{
                "type":"integer",
                "minimum":1,
                "maximum":12
            },
            "year":{
                "type":"integer",
                "minimum":0
            }
        }
    },
    "personInfo":{
        "type":"object",
        "properties":{
            "name":{
                "type":"string"
            },
            "dateOfBirth":{
                "type":"date"
            }
        }
    },
    "student":{
        "type":"object",
        "properties":{
            "id":{
                "type":"personInfo"
            },
            "pass_out_year":{
                "type":"date"
            }
        }
    }
}

このような複数の場所で「日付」のプロパティを提供する代わりに:

{
    "personInfo":{
        "type":"object",
        "properties":{
            "name":{
                "type":"string"
            },
            "dateOfBirth":{
                "type":"object",
                "properties":{
                    "month":{
                        "type":"integer",
                        "minimum":1,
                        "maximum":12
                    },
                    "year":{
                        "type":"integer",
                        "minimum":0
                    }
                }
            }
        }
    },
    "student":{
        "type":"object",
        "properties":{
            "id":{
                "type":"personInfo"
            },
            "pass_out_year":{
                "type":"object",
                "properties":{
                    "month":{
                        "type":"integer",
                        "minimum":1,
                        "maximum":12
                    },
                    "year":{
                        "type":"integer",
                        "minimum":0
                    }
                }
            }
        }
    }
}

仕様の5.1タイプによると、それは不可能ですが、そのような基本的なユースケースのようです!

4

4 に答える 4

4
  1. あなたが正しく理解したように、$schemaそれが準拠するスキーマを指定するために使用できます。
  2. JSON スキーマのバージョン管理をグーグルで検索しているときに、実際にこのトピックを見つけました。バージョン管理に URI を使用するという考えは論理的に聞こえます。
  3. を使用$refして、プルされる別のスキーマにリンクできます。
  4. ここでも、JSON ポインター$refを使用して、他のスキーマから定義をインポートできます。

スキーマを検証して間違いがないかどうかを確認することで、いつでもテストできます。

于 2013-09-17T16:07:29.257 に答える
2

JSON Schema Draft 03 の #5.23"format" : "date"に従ってを使用しないのはなぜですか?

さらに、生年月日の定義には、エラーと思われる日付が含まれていません。

于 2012-07-26T15:22:54.260 に答える
1

仕様は、次のことができることを示唆しているようです:

他のタイプの値は、カスタムの目的で使用される場合があります...

次に、最小限の実装のバリデーターが何をするかについて説明します。

私の考えでは、あなたがやりたいことはOKのようです。型参照と型定義を同じファイルに保持すると、スキーマが明確になる場合があります。

あなたのファイルにはQが含まれていると思います。たとえば、サブファイルをマージするスクリプト/テンプレート(erbなど)から完全なjsonを生成する開発ステップがあります。私の考えでは、あなたのサービスは、そのサービスと完全にやり取りするために必要な完全な json を常に提供する必要があります。これがクライアントの観点から管理不能になった場合は、リファクタリングして別のサービスを導入するシグナルである可能性があります。

于 2012-06-26T23:09:38.227 に答える