Spring Data REST - Data Meets Hypermedia

2,735 views

Published on

Speakers: Roy Clarkson, Greg Turnquist
Data / Integration Track

Spring Data REST bridges the gap between the convenient data access layers provided by Spring Data's repository abstraction and hypermedia-driven REST web services, effectively taking out the boilerplate needed during implementation. This talk will give a quick overview of the project, explain fundamental design decisions and introduce new features of the latest version (namely service documentation and discoverability).

We will then look at the Spring-A-Gram sample application (built using Spring Data REST), focusing on the implementation of the frontend bits and pieces.

Published in: Software

Spring Data REST - Data Meets Hypermedia

  1. 1. Spring Data REST Data Meets Hypermedia By Greg Turnquist, Roy Clarkson, Oliver Gierke 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/
  2. 2. 2 Hypermedia is an adventure You only need a few tools But the results can be amazing
  3. 3. 3
  4. 4. 4
  5. 5. Oliver Gierke • Spring Data master • Spring HATEOAS • Jürgenized • Drums, music, … 5 @olivergierke
  6. 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. 7
  8. 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. 9. 9 HAL
  10. 10. 10 HAL Hypertext Application Language A lean hypermedia type application/hal+json Adopting HAL will make your API explorable, and its documentation easily discoverable from within the API itself. — Mike Kelly, HAL spec lead
  11. 11. 11 HAL haltalk.herokuapp.com
  12. 12. What is Spring Data REST? • What is ALPS? 12
  13. 13. Greg Turnquist • Spring Data REST • Spring Boot • Spring anything… • Getting started guides 13 Learning Spring Boot @gregturn
  14. 14. Architecture 14 GET /api Spring-a-Gram MVC SQL Spring Data Spring Mobile Spring Android Spring Hateoas Spring Framework
  15. 15. 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/
  16. 16. Spring Data REST Data Meets Hypermedia By Greg Turnquist, Roy Clarkson, Oliver Gierke 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/
  17. 17. Hi, my name is Roy Clarkson 17 @royclarkson
  18. 18. 18 Demo Spring-a-Gram Demo
  19. 19. Built with Spring components 19 Spring for Android Spring HATEOAS
  20. 20. What problem are we trying to solve? 20
  21. 21. Android REST client • Consistent programming model • Powerful • Extensible 21
  22. 22. Spring Framework vs Spring for Android • Core • RestTemplate 22 http://projects.spring.io/spring-android https://github.com/spring-projects/spring-android
  23. 23. HTTP Methods • DELETE - delete(...) • GET - getForObject(...) • HEAD - headForHeaders(...) • OPTIONS - optionsForAllow(...) • POST - postForLocation(...) • PUT - put(...) • any HTTP operation - exchange(...) and execute(...) 23
  24. 24. RestTemplate Example RestTemplate restTemplate = new RestTemplate();! String url = "http://example.com/hotels/{hotel}/bookings/{booking}";! String result = restTemplate.getForObject(url, String.class, "42", “21”);! 24
  25. 25. 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
  26. 26. Spring for Android 2.0.0.M1 • Generics • OkHttp • API parity • Dependency updates • Bug fixes • Based on Spring Framework 3.2.x 26
  27. 27. Supported Android Versions 27 https://developer.android.com/about/dashboards/index.html
  28. 28. HTTP Clients • Native • Standard J2SE facilities (UrlConnection) • HttpComponents HttpClient 4.1 • Third Party • OkHttp • HttpComponents HttpClient 4.3 28
  29. 29. Generics 29 ParameterizedTypeReference<Resources<ItemResource>> typeRef =! new ParameterizedTypeReference<Resources<ItemResource>>() { };! ! ResponseEntity<Resources<ItemResource>> responseEntity = ! restTemplate.exchange(url, HttpMethod.GET, requestEntity, typeRef);
  30. 30. Project Roadmap • HttpComponents 4.3 • AsyncRestTemplate • Improved Spring Social integration • Improved Spring HATEOAS integration • WebSocket • Differential Sync 30
  31. 31. 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
  32. 32. Let’s look at some code! 32
  33. 33. 33 Want to see more? 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 Questions?

×