putting hypermedia back in rest with jax-rs

Post on 07-Jan-2017

542 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

top related