Skip to content

Commit

Permalink
Support URI input with "hrefSchema"
Browse files Browse the repository at this point in the history
In Draft 05, "method" simply controlled whether link input was placed
in the URI (for a value of "get") or in the request body (for a value
of "post").  While correlating with HTML, this was both confusing due
to "get" and "post" not necessarily indicating the HTTP methods of the
same name, and limiting in that users/clients could not submit data
through both the URI and the request body at the same time.

This introduces "hrefSchema" which provides a schema for user input
matching the "href" URI Template variables.  Since "schema" is now
only used in the cases where "method" was set to "post" in Draft 05,
there is no longer a need for "method".

A link with a "schema" is equivalent to a Draft 05 "post" link.
A link without a "schema" is equivalent to a Draft 05 "get" link.

As in Draft 05, a "get" link simply indicates the presence of
a related resource, and does not mean that HTTP GET is the only
method that can be used with the resource.

Additionally, the complex and apparently rarely if ever used "href"
preprocessing rules have been removed, and both the resulting and
pre-existing limitations have been documented.  They will be the
subject of work for future drafts.

The meta-schemas have been updated accordingly.
  • Loading branch information
handrews committed Jan 10, 2017
1 parent a43ed2c commit 1ff04ce
Show file tree
Hide file tree
Showing 3 changed files with 201 additions and 175 deletions.
14 changes: 8 additions & 6 deletions hyper-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@
"properties": {
"href": {
"description": "a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",
"type": "string"
"type": "string",
"format": "uritemplate"
},
"hrefSchema": {
"description": "a schema for validating user input to the URI template, where the input is in the form of a JSON object with property names matching variable names in \"href\"",
"allOf": [ {"$ref": "#"} ]
},
"rel": {
"description": "relation to the target resource of the link",
Expand All @@ -36,10 +41,6 @@
"description": "media type (as defined by RFC 2046) describing the link target",
"type": "string"
},
"method": {
"description": "specifies that the client can construct a templated query (\"get\") or non-idempotent request (\"post\") to a resource.",
"type": "string"
},
"encType": {
"description": "The media type in which to submit data along with the request",
"type": "string",
Expand Down Expand Up @@ -96,7 +97,8 @@

"base": {
"description": "URI Template resolved as for the 'href' keyword in the Link Description Object. The resulting URI Reference is resolved against the current URI base and sets the new URI base for URI references within the instance.",
"type": "string"
"type": "string",
"format": "uritemplate"
},
"links": {
"type": "array",
Expand Down
Loading

0 comments on commit 1ff04ce

Please sign in to comment.