spring data rest - data meets hypermedia

33
Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Data REST Data Meets Hypermedia By Greg Turnquist, Roy Clarkson, Oliver Gierke

Upload: spring-io

Post on 20-Aug-2015

1.245 views

Category:

Software


2 download

TRANSCRIPT

Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

Spring Data REST Data Meets Hypermedia

By Greg Turnquist, Roy Clarkson, Oliver Gierke

2

Hypermedia is an adventure

You only need a few tools

But the results can be amazing

3

4

Oliver Gierke

• Spring Data master • Spring HATEOAS • Jürgenized • Drums, music, …

5

@olivergierke

What is Spring Data REST?

• Implements common patterns on top of repositories • Collection / Item resources • Association resources • Search resources

• Supports • JPA, GemFire, Neo4j, MongoDB • Others are coming…

6

7

What is Spring Data REST?

• Leverages hypermedia & internet standards • HAL (draft) • ALPS (draft) • URI Templates (RFC 6570) • text/uri-list mediatype (RFC 2483) • profile link relation (RFC 6906)

8

You aren’t building a “Spring Data REST” app, but instead a RESTful standards-based app.

9

HAL

10

Hypertext Application Language

A lean hypermedia type

application/hal+json

HAL

Adopting HAL will make your API explorable, and its documentation easily discoverable from within the API itself. — Mike Kelly, HAL spec lead

11

haltalk.herokuapp.comHAL

What is Spring Data REST?

• What is ALPS?

12

Greg Turnquist

• Spring Data REST • Spring Boot • Spring anything… • Getting started guides

13

Learning Spring Boot

@gregturn

Architecture

14

GET /api

Spring-a-Gram MVC SQL

Spring Data

Spring Mobile

Spring Android

Spring Hateoas

Spring Framework

Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

Demo: Spring-a-Gram

Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

Spring Data REST Data Meets Hypermedia

By Greg Turnquist, Roy Clarkson, Oliver Gierke

Hi, my name is Roy Clarkson

17

@royclarkson

18

Demo

Spring-a-Gram Demo

Built with Spring components

19

Spring for Android

Spring HATEOAS

What problem are we trying to solve?

20

Android REST client

• Consistent programming model

• Powerful • Extensible

21

Spring Framework vs Spring for Android

• Core • RestTemplate

22

https://github.com/spring-projects/spring-android

http://projects.spring.io/spring-android

HTTP Methods

• DELETE - delete(...) • GET - getForObject(...) • HEAD - headForHeaders(...) • OPTIONS - optionsForAllow(...) • POST - postForLocation(...) • PUT - put(...) • any HTTP operation - exchange(...) and execute(...)

23

RestTemplate Example

24

RestTemplate restTemplate = new RestTemplate();!String url = "http://example.com/hotels/{hotel}/bookings/{booking}";!String result = restTemplate.getForObject(url, String.class, "42", “21”);!

HTTP Message Converters

• MappingJackson2HttpMessageConverter - object to JSON marshaling supported via the Jackson JSON Processor

• GsonHttpMessageConverter - object to JSON marshaling supported via Google Gson

• SimpleXmlHttpMessageConverter - object to XML marshaling supported via the Simple XML Serializer

25

Spring for Android 2.0.0.M1

• Generics • OkHttp • API parity • Dependency updates • Bug fixes • Based on Spring

Framework 3.2.x

26

Supported Android Versions

27https://developer.android.com/about/dashboards/index.html

HTTP Clients

• Native • Standard J2SE facilities (UrlConnection) • HttpComponents HttpClient 4.1

• Third Party • OkHttp • HttpComponents HttpClient 4.3

28

Generics

29

ParameterizedTypeReference<Resources<ItemResource>> typeRef =! new ParameterizedTypeReference<Resources<ItemResource>>() { };!!ResponseEntity<Resources<ItemResource>> responseEntity = ! restTemplate.exchange(url, HttpMethod.GET, requestEntity, typeRef);

Project Roadmap

• HttpComponents 4.3 • AsyncRestTemplate • Improved Spring Social

integration • Improved Spring

HATEOAS integration • WebSocket • Differential Sync

30

Getting Started Guides at http://spring.io/guides

• Consuming a RESTful Web Service with Spring for Android • Consuming XML from a RESTful Web Service with Spring

for Android • Building Android Projects with Gradle • Building Android Projects with Maven • Installing the Android Development Environment

31

Let’s look at some code!

32

33

github.com/spring-projects/spring-data-rest github.com/spring-projects/spring-android github.com/SpringOne2GX-2014/spring-a-gram github.com/SpringOne2GX-2014/spring-a-gram-android

Want to see more?

Questions?