JSON Hyper-Schema の hrefSchema と submissionSchema

イワモトです。JSON Hyper-Schemaのインターネットドラフトを読んでいて、以前の版になかった hyperSchemasubmissionSchemaが追加されていることに気づきました。

hrefSchema

hrefSchemaは、URIのバリデーション定義に使われます。ドラフトに載っている下記の例だと、 /foos?count=tenはinvalidになります。

{
"href": "/foos{?condition,count,query}",
"hrefSchema": {
"properties": {
"condition": {
"type": "boolean",
"default": true
},
"count": {
"type": "integer",
"minimum": 0,
"default": 0
},
"query": {
"type": "string"
}
}
}
}

クエリストリング部分だけではなく、 "href": "/foos/{id}"のようにURIテンプレートを定義すれば、パス部分のバリデーションにも使えます。

submissionSchema

submissionSchemaは、リクエスト内容の定義に使われます。 submissionEncTypeでエンコーディング形式が指定できます。

ドラフトに載っている下記の例では、マルチパートメールのテキストパートとHTMLパートが必須であると定義されています。

{
"links": [{
"submissionEncType": "multipart/alternative; boundary=ab12",
"rel": "author",
"href": "mailto:someone@example.com{?subject}",
"hrefSchema": {
"type": "object",
"properties": {
"subject": { "type": "string" }
},
"required": ["subject"]
},
"submissionSchema": {
"type": "array",
"items": [
{
"type": "string",
"media": { "type": "text/plain; charset=utf8" }
},
{
"type": "string",
"media": { "type": "text/html" }
}
],
"minItems": 2
}
}]
}

hrefSchema がmailtoスキームのURIテンプレートに対して使われているのと合わせ、面白い例です。

感想

JSON Hyper-SchemaでAPIの仕様を表現し、バリデーション用のスキーマ定義として使うケースにおいては、柔軟な定義が可能になって喜ばしいことだと思いました。

JSON Hyper-Schema自体の仕様が今後どのように発展するのか、今後も注目していきます。