JSON Hyper-Schema の hrefSchema と submissionSchema
イワモトです。JSON Hyper-Schemaのインターネットドラフトを読んでいて、以前の版になかった hyperSchema
と submissionSchema
が追加されていることに気づきました。
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自体の仕様が今後どのように発展するのか、今後も注目していきます。