Skip to content
jvelilla edited this page Jul 12, 2012 · 18 revisions

IN PROGRESS

Evaluate Media Types

  • 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.

Create/Choose Media Types

  • Collection/JSON

Graph Data Model

  • 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-JSON template

{
"collection" :
	{
	"version" : "1.0",
	"href" : URI,
	"links" : [ARRAY],
	"items : [ARRAY],
	"queries" : [ARRAY],
	"template" : {OBJECT},
	"error" : {OBJECT}
	}
}

Collection/JSON Hypermedia API

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"}
	     ]
       }   
   }
   }

Home Page: The collection response

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" : {...}, ... }

Create a Graph: (Add an item)

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.

Clone this wiki locally