REST by Examples

About Me

  • Software Developer/Architect

  • Work at Rackspace

  • JUG Co-Leader

  • @jokerr

Agenda

Agenda

  • Why REST?
  • Sample Service - Design
  • Sample Service - Code

Why REST?

SOAP?

XML RPC?

Adopting HTTP

HTTP Method In English
GET Retrieve
POST Create
PUT Update
DELETE Delete
Status Code In English
100x Informational
200x Received and understood
300x Redirect
400x PEBKAC or client error
500x BOOM!

PUT vs PATCH

The REST Maturity Model

HATEOAS

Example Service

SunnyJ's Cook Book

  • Create and manage recipes

  • Recipes have

    • Steps (turn oven on)

    • Ingredients (1 cup milk)

    • Tagging (cookies, peanuts)

  • Users can search for recipes by tag

The Hardest Part

The Fun Part

JAX-RS

Java API for RESTful Services

  • API Spec for REST

  • Currently on version 2.0

  • Many impliementers including Jersey, RestEasy, and Apache CFX

Annotations

  • @Path

  • @GET, @PUT, @POST, @DELETE

  • @Produces

  • @Consumes

  • @PathParam

  • @QueryParam

JAX-RS

  • ExceptionMappers

  • Marshaling/Unmarshalling

  • Providers

  • Context

Spring

Spring

  • Very popular framework (ecosystem) for Java

  • There's a project for that

  • Create stand-alone apps quickly with Spring Boot

Annotations

  • @RequestMapping

    • path=

    • method=

    • produces=

    • consumes=

  • @RequestParam

  • @RequestBody/ResponseBody

Comparing Annotations

@Path("/recipes")
@GET
@PUT
@POST
@DELETE
@PathParam("id")
@QueryParam("tag")
@FormParam("xyz")
@Produces("application/json")
@Consumes("application/json")
N/A
N/A
@RequestMapping(path="/recipes")
@RequestMapping(method=RequestMethod.GET)
@RequestMapping(method=RequestMethod.PUT)
@RequestMapping(method=RequestMethod.POST)
@RequestMapping(method=RequestMethod.DELETE)
@PathVariable("id")
@RequestParam("tag")
@RequestParam(value="xyz")
@RequestMapping(produces="application/json")
@RequestMapping(consumes="application/json")
@RequestBody
@ResponseBody

Q&A

References

REST By Example

By Josh Kerr

REST By Example

  • 377