spring data rest - data meets hypermedia
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
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
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.
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
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
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
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