HTTP/1.1 302 Found
Location: http://absynthmind.github.io/hypermedia-design/
Content-type: presentation/reveal+css
context
http://tessel.io
http://martinfowler.com/articles/richardsonMaturityModel.html
“REST is software design on the scale of decades:
every detail is intended to promote software longevity and independent evolution”
“Many of the constraints
are directly opposed
to short-term efficiency.people are fairly
good at short-term design, and usually
awful at long-term design”
context
curl -i https://api.github.com
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: application/json; charset=utf-8
Status: 200 OK
{
"current_user_url": "https://api.github.com/user",
"authorizations_url": "https://api.github.com/authorizations",
"repository_url": "https://api.github.com/repos/{owner}/{repo}",
...
}
curl -i https://api.github.com/repos/absynthmind/hypermedia-design
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: application/json; charset=utf-8
Status: 200 OK
{
"id": 15635201,
"name": "hypermedia-design",
"full_name": "absynthmind/hypermedia-design",
"owner": {
"login": "absynthmind",
"id": 727855,
"avatar_url": "https://gravatar.com/avatar/...",
"followers_url": "https://api.github.com/users/absynthmind/followers",
...
},
"git_refs_url": "https://api.github.com/repos/absynthmind/hypermedia-design/git/refs{/sha}",
"git_commits_url": "https://api.github.com/repos/absynthmind/hypermedia-design/git/commits{/sha}",
...
}
curl -i https://api.github.com/repos/absynthmind/hypermedia-design/git/refs
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: application/json; charset=utf-8
Status: 200 OK
[
{
...
},
{
"ref": "refs/heads/master",
"url": "https://api.github.com/repos/absynthmind/hypermedia-design/git/refs/heads/master",
"object": {
"sha": "b3b2d4d5b7362635c670d7f2033d9c1dc17b1416",
"type": "commit",
"url": "https://api.github.com/repos/absynthmind/hypermedia-design/git/commits/b3b2d4d5b7362635c670d7f2033d9c1dc17b1416"
}
}
]
curl -i https://api.github.com/repos/absynthmind/hypermedia-design/git/commits/b3b2d4d5b7362635c670d7f2033d9c1dc17b1416
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: application/json; charset=utf-8
Status: 200 OK
{
"committer": {
"name": "Ronk",
"email": "ron.kersic@gmail.com",
"date": "2014-01-13T10:39:22Z"
},
"message": "added introduction section",
"parents": [
{
"sha": "8cfcb1d88e1546da9a3fd7407c96ad66d6325e78",
"url": "https://api.github.com/repos/absynthmind/hypermedia-design/git/commits/8cfcb1d88e1546da9a3fd7407c96ad66d6325e78",
"html_url": "https://github.com/absynthmind/hypermedia-design/commits/8cfcb1d88e1546da9a3fd7407c96ad66d6325e78"
}
]
}
var api = require('traverson').json.from('https://api.github.com/')
api.newRequest()
.follow('repository_url', 'commits_url')
.withTemplateParameters({
owner: 'absynthmind',
repo:'hypermedia-design',
sha: 'b3b2d4d5b7362635c670d7f2033d9c1dc17b1416'
}).getResource(function(err, resource) {
if (err) { console.log(err); return; }
console.log(resource)
})
GET http://api.alttekpub.com
{
"_links": {
"self": { "href": "..." },
"productions": { "href": "..." }
}
}
{
"_links": {
"self": { "href": "..." },
"filter": { "href": "...{?categories}" }
},
"categories": ["Microsoft", "Ruby", "Javascript", "Mobile"],
"_embedded": {
"videos": [{
"_links": {
"self": { "href": "..." },
"episodes": { "href": "..." }
},
"title": "Real World ASP.NET MVC3",
"description": "In this advanced, somewhat-opinionated production you'll get your very own startup off the ground using ASP.NET MVC 3...",
"permitted": true
},
...
}]
}
}
{
"_links": {
"self": { "href": "..." }
},
"title": "Real World ASP.NET MVC3",
"description": "In this advanced, somewhat-opinionated production you'll get your very own startup off the ground using ASP.NET MVC 3...",
"permitted": true,
"_embedded": {
"episodes": [{
"_links": {
"self": { "href": "..." },
"media": [{
"type": "video/webm; codecs='vp8.0, vorbis'",
"href": "..."
},{
"type": "video/ogg; codecs='theora, vorbis'",
"href": "..."
}]
},
...
“the simultaneous presentation of
information and controlssuch that
the information becomes the affordance through which the (client) obtains
choices and selects actions”
{
"resources": {
"core": {
"limit": 60,
"remaining": 58,
"reset": 1389681064
},
"search": {
"limit": 5,
"remaining": 5,
"reset": 1389677567
}
},
"rate": {
"limit": 60,
"remaining": 58,
"reset": 1389681064
}
}
https://api.github.com/rate_limit
Design
“People don't want a 1/4'' drill
They want a 1/4'' hole”
http://amundsen.com/examples/mazes/2d/five-by-five/
or create them
A monolith, once upon a time