Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SpringOne2GX 2014: Spring Data REST - Data Meets Hypermedia

Greg Turnquist
September 10, 2014

SpringOne2GX 2014: Spring Data REST - Data Meets Hypermedia

See a demo of Spring Data REST where three different front ends interact with a single back end to snap pictures and upload them to Spring-a-Gram, a $1B acquisition in the making!

Greg Turnquist

September 10, 2014
Tweet

More Decks by Greg Turnquist

Other Decks in Programming

Transcript

  1. 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. 2 Hypermedia is an adventure You only need a few

    tools But the results can be amazing
  3. 3

  4. 4

  5. Oliver Gierke • Spring Data master • Spring HATEOAS •

    Jürgenized • Drums, music, … 5 @olivergierke
  6. 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. 7

  8. 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. 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
  10. Greg Turnquist • Spring Data REST • Spring Boot •

    Spring anything… • Getting started guides 13 Learning Spring Boot @gregturn
  11. Architecture 14 GET /api Spring-a-Gram MVC SQL Spring Data Spring

    Mobile Spring Android Spring Hateoas Spring Framework
  12. 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
  13. 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
  14. Spring Framework vs Spring for Android • Core • RestTemplate

    22 https://github.com/spring-projects/spring-android http://projects.spring.io/spring-android
  15. HTTP Methods • DELETE - delete(...) • GET - getForObject(...)

    • HEAD - headForHeaders(...) • OPTIONS - optionsForAllow(...) • POST - postForLocation(...) • PUT - put(...) • any HTTP operation - exchange(...) and execute(...) 23
  16. 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”);!
  17. 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
  18. Spring for Android 2.0.0.M1 • Generics • OkHttp • API

    parity • Dependency updates • Bug fixes • Based on Spring Framework 3.2.x 26
  19. HTTP Clients • Native • Standard J2SE facilities (UrlConnection) •

    HttpComponents HttpClient 4.1 • Third Party • OkHttp • HttpComponents HttpClient 4.3 28
  20. Generics 29 ParameterizedTypeReference<Resources<ItemResource>> typeRef =! new ParameterizedTypeReference<Resources<ItemResource>>() { };! !

    ResponseEntity<Resources<ItemResource>> responseEntity = ! restTemplate.exchange(url, HttpMethod.GET, requestEntity, typeRef);
  21. Project Roadmap • HttpComponents 4.3 • AsyncRestTemplate • Improved Spring

    Social integration • Improved Spring HATEOAS integration • WebSocket • Differential Sync 30
  22. 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