Collection JSON Graphviz Hypermedia API

jvelilla edited this page Feb 22, 2013 · 11 revisions

Graphviz Hypermedia API, using Collection JSON media type [1]

The actual design allows users to:

  • Register a new user
  • Add, Update, Delete graph definitions (only for registered users)
  • Retrieve a fix set of representations, pdf, jpg, png, gif
  • Anonymous users can browse the API, and retrieve the graph representation, but they can't Create/Update/Delete them.
  • Paging graph results

A simplified state machine is described here

We are using Basic Authentication, we plan to extend it with other options like OAuth, OpenId, etc.

State transitions

  • The home page
  • Template for register a new user
  • The list of graphs (pages)
  • A single graph selected from the previous list
  • The list of graph per user
  • A single graph selected from the previous list per user
  • Template for create a new graph
  • Template for updating an existing graph
  • Delete an existing graph

TODO

  • template for queries

Graphviz API

Home Page

GET /

        {
	  "collection": {
		"version": "1.0", 
		"href": "http://127.0.0.1:8190/", 
		"links": [
		  {"href": "http://127.0.0.1:8190/", "rel": "home", "prompt": "Home API"}, 
		  {"href": "http://127.0.0.1:8190/graph", "rel": "graphs", "prompt": "Home Graph"}, 
		  {"href": "http://127.0.0.1:8190/register", "rel": "register", "prompt": "User Register"}, 
		  {"href": "http://127.0.0.1:8190/login", "rel": "login", "prompt": "User Login"}
		]
	  }
	}

Anonymous user list all Graphs

GET /graphs

	{
	  "collection": {
		"version": "1.0", 
		"href": "http://127.0.0.1:8190/graph", 
		"links": [
		  {"href": "http://127.0.0.1:8190/", "rel": "home", "prompt": "Home API"}, 
		  {"href": "http://127.0.0.1:8190/register", "rel": "register", "prompt": "User Register"}, 
		  {"href": "http://127.0.0.1:8190/login", "rel": "login", "prompt": "User Login"}, 
		  {"href": "http://127.0.0.1:8190/graph?offset=0", "rel": "first", "prompt": "Page 1 of 5"}, 
		  {"href": "http://127.0.0.1:8190/graph?offset=5", "rel": "next", "prompt": "Page 2 of 5"}, 
		  {"href": "http://127.0.0.1:8190/graph?offset=20", "rel": "last", "prompt": "Page 5 of 5"}
		], 
		"items": [
		  {
			"href": "http://127.0.0.1:8190/graph/1", 
			"data": [
			  {"name": "description", "prompt": "Description", "value": "tes"}, 
			  {"name": "content", "prompt": "Graph", "value": "digraph revolution { B [label=\"The boss\"]  ; E [label=\"The employee\"]; B ->E [label=\"commands\", dir=back, fontcolor=red];} "}, 
			  {"name": "title", "prompt": "Title", "value": "cool"}
			], 
			"links": [
			  {
				"href": "http://127.0.0.1:8190/graph/1.png", 
				"rel": "Image", 
				"prompt": "Graph", 
				"name": "Title", 
				"render": "image/png"
			  }, 
			  {
				"href": "http://127.0.0.1:8190/graph/1.jpg", 
				"rel": "Image", 
				"prompt": "Graph", 
				"name": "Title", 
				"render": "image/jpg"
			  }, 
			  {
				"href": "http://127.0.0.1:8190/graph/1.pdf", 
				"rel": "Image", 
				"prompt": "Graph", 
				"name": "Title", 
				"render": "application/pdf"
			  }, 
			  {
				"href": "http://127.0.0.1:8190/graph/1.gif", 
				"rel": "Image", 
				"prompt": "Graph", 
				"name": "Title", 
				"render": "application/gif"
			  }
			]
		  }, 
		   ....	 
	  }
	}

References [1] http://amundsen.com/media-types/collection/

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.