RJUG - REST API / JAX-RS Overview

19
REST APIs Overview and Jersey / JAX-RS Intro Andy Pemberton RJUG, May 2014

description

An overview of JAX-RS, Jersey, and REST API development

Transcript of RJUG - REST API / JAX-RS Overview

Page 1: RJUG - REST API / JAX-RS Overview

REST APIs

Overview and Jersey / JAX-RS Intro

Andy PembertonRJUG, May 2014

Page 2: RJUG - REST API / JAX-RS Overview

Background

Page 3: RJUG - REST API / JAX-RS Overview

Background

• Front-end guy

• Middleware Java guy

• Agilist, learner, polyglot

• Family guy

Page 4: RJUG - REST API / JAX-RS Overview

REST in a Page

• Architectural Style – a set of constraints

• Nouns and Verbs

• HTTP-Based

• Roy Fielding – U. C. Irvine– “Representational State Transfer”

• Not SOAP

Page 5: RJUG - REST API / JAX-RS Overview

Constraint: Nouns and Verbs

Page 6: RJUG - REST API / JAX-RS Overview

Constraint: Nouns and Verbs

• Nouns– Your business model• Account, Plan, Cat, Dog, Foo, Bar

• Verbs– HTTP-Defined (RFC-2616)• GET, PUT, POST, DELETE• TRACE, OPTIONS, HEAD• PATCH

Page 7: RJUG - REST API / JAX-RS Overview

Examples

BAD

GET /fetch-accountsGET /create-paymentPOST /cancel-payment

GOOD

GET /accountsPOST /paymentDELETE /payments/{id}

Page 8: RJUG - REST API / JAX-RS Overview

Verbs

• GET (idempotent)• PUT (idempotent)• POST• DELETE• PATCH (draft)• TRACE, OPTIONS, HEAD

Page 9: RJUG - REST API / JAX-RS Overview

Specs and Stuff

• JAX-RS – Java API for RESTful Web Services

– JSR-311 – JAX-RS 1.0

– JSR-339 – JAX-RS 2.0• Dependency Injection• Bean Validation• Client API enhancements

Page 10: RJUG - REST API / JAX-RS Overview

Web & Mobile Friendly

Page 11: RJUG - REST API / JAX-RS Overview

Frameworks

• .NET – asp.net web API• Others: Ruby, NodeJS, Scala, Python• Java– Glassfish (Oracle) – Jersey– JBoss – RESTEasy– Restlet– Dropwizard

Page 12: RJUG - REST API / JAX-RS Overview

Jersey

• Oracle Reference Implementation– JSR-311, JSR-339

• Extensions

• Examples Projects

Page 13: RJUG - REST API / JAX-RS Overview

OK - code time, but you got the idea…

Page 14: RJUG - REST API / JAX-RS Overview

Other Constraints

• Client-Server

• Hypermedia contracts (links, hrefs)

• Stateless

Page 15: RJUG - REST API / JAX-RS Overview

API Documentation

• wsdl 2.0, wadl

• apiary.io

• enunciate

• swagger– Mashery I/O Docs

Page 16: RJUG - REST API / JAX-RS Overview
Page 17: RJUG - REST API / JAX-RS Overview

Swagger

• Swagger Core– Annotations– JAX-RS integration– Schema generations

• Swagger UI

Page 18: RJUG - REST API / JAX-RS Overview

Advanced REST

• Partial representationsapi.foobar.com/addresses?select=postalCode

• Resource linking / expansionapi.foobar.com/customers/1234?expand=accounts

• API Versioning