-
Notifications
You must be signed in to change notification settings - Fork 4
Media types
IN PROGRESS
- start with Collection/JSON
- See later if we want to use HAL in addition or replacement
- note: both "standards" are evolving, so we are likely to update the lib for time to time.
- Collection/JSON
- content: graphviz’s code
- id: UUID, shortname, integer ..
- title: user friendly title
- description: description of the graph
- (image: generated graph from the graphviz’s code)
{
"collection" :
{
"version" : "1.0",
"href" : URI,
"links" : [ARRAY],
"items : [ARRAY],
"queries" : [ARRAY],
"template" : {OBJECT},
"error" : {OBJECT}
}
}
We will return a full Collection+JSON response including links, queries, the write template, and the list of items.
{ // based on Collection+JSON media type
// http://www.amundsen.com/media-types/collection/
"collection" : {
"href" : "...",
"version" : "1.0",
"links" : [
{"rel" : "author", "href" : "...", "prompt" : "Author"},
{"rel" : "profile", "href" : "...", "prompt" : "Profile"}
],
//Queries
"queries" : [
{"rel" : "all", "href" : "...", "prompt" : "All Graphs"},
{"rel" : "byName", "href" : "...", "prompt" : "byName",
"data" : [
{"name" : "name", "value" : "", "prompt" : "Graph Name"},
]
}
],
//Graph Collections
"items" : [
{"href" : "...",
"data" :[
{"name" : "title", "value" : "...", "prompt" :"Title"},
{"name" : "content", "value" : "...", "prompt" : "Graphviz Code"},
{"name" : "id", "value" : "...", "prompt" : "Id"},
{"name" : "description", "value" : "...", "prompt" : "Description"},
{"name" : "representation", "value" : "...", "prompt" : "Binary Representation"}
]
}
],
//Graph template
// Use this date to create a new Graph
"template" :
{"data" :[
{"name" : "title", "value" : "...",prompt:"Title"},
{"name" : "content", "value" : "...", "prompt" : "Graphviz Code"},
{"name" : "description", "value" : "...", "prompt" : "Description"}
]
}
}
}
The collection response, we will return a Collection+JSON response including any collection links, queries, the write template, and the list of items. The client sends an HTTP GET request to the root URI and the server return a Collection+JSON Document
REQUEST
GET / HTTP/1.1
Host: www.graphviz-server.org
Accept: application/vnd.Collection+JSON
RESPONSE
200 OK HTTP/1.1
Content-Type: application/vnd.Collection+JSON
Content-Length: xxx
{ "collection" : {...}, ... }
To create a new graph (an item) in the collection, the client use the template object to compose a valid graph representation.
// write template for "Graph" application
{
"template" :
{
"data" :
[
{"name" : "title", "value" : "a" :"Title"},
{"name" : "content", "value" : "", "prompt" : "Graphviz Code"},
{"name" : "description", "value" : "", "prompt" : "Description"}
]
}
and then uses HTTP POST to send that representationto the server for processing. If the item resource was created successfully, the server responds with a status code of201 and a Location header that contains the URI of the newly created item resource:
REQUEST
POST /HTTP/1.1
Host: www.graphviz-server.org
Content-Type: application/vnd.Collection+JSON
{ "template" : { "data" : [ ...] } }
RESPONSE
201 Created HTTP/1.1
Location: www.graphviz-server.org/GraphUUID_1
The URI returned in the location header, then can be used to read, update, and delete the resource.