putting hypermedia back in rest with jax-rs
TRANSCRIPT
Putting Hypermedia Back in REST with JAX-RS
sebastian daschner
@DaschnerS
sebastian daschner
● Java developer / architect / consultant
● JAX-RS Expert Group member
● Java Champion
● conference speaker
@DaschnerS
workshops / training
● workshops in Munich
● workshops in Oslo / Norway (TBA)
● virtually on demand
@DaschnerS
“REST” APIs in real-world projects
@DaschnerS
“REST” APIs in real-world projects
POST /doSomeActionrequest<someActionRequest> <param>12345</param></someActionRequest>
response<someActionResponse> <foo>bar</foo> ...</someActionResponse>
@DaschnerS
“REST” APIs in real-world projects
POST /getFoobarInformationrequest<foobar> <id>12345</id></foobar>
response<information> <foo>bar</foo> ...</information>
@DaschnerS
Resources
@DaschnerS
“REST” APIs in real-world projects
GET /users
response<users> <user> <id>12345</id> <name>Duke</name> <motto>JAX-RS rocks!</motto> </user> ...</users>
@DaschnerS
Semantic HTTP
@DaschnerS
“REST” APIs in real-world projects
POST /usersrequest<user> <name>Duke</name> <motto>JAX-RS rocks!</motto></user>
response201 CreatedLocation: /users/12345
@DaschnerS
Enter Hypermedia
@DaschnerS
Enter Hypermedia
GET /users
response<users> <user> <name>Duke</name> <motto>JAX-RS rocks!</motto> <link rel="self" href="/users/1234"/> </user></users
@DaschnerS
Enter Hypermedia
GET /books/12345
response{ "name": "Java", // + author, availability, price "_links": { "self": "/books/12345", "add-to-cart": "/shopping_cart" }}
@DaschnerS
Enter Hypermedia
..."actions": [ { "name": "add-to-cart", "method": "POST", "href": "/shopping_cart", "type": "application/json", "fields": [ { "name": "id", "type": "text" }, { "name": "quantity", "type": "number" } ] }]
@DaschnerS
Hypermedia formats
● HAL
● Collections+JSON
● Siren
● JSON Schema
● JSON-LD & Hydra
● ...
Thanks for your attention!
sebastian-daschner.comtwitter.com/DaschnerSgithub.com/sdaschner