javaone latam 2016 - restful services simplificado com spring data rest
TRANSCRIPT
![Page 1: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/1.jpg)
RESTful services simplificado com Spring Data RESTRodrigo Cândido da Silva @rcandidosilva
![Page 2: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/2.jpg)
About Me• Software Architect
• http://integritastech.com • JUG Leader do GUJavaSC
• http://gujavasc.org • Twitter
• @rcandidosilva • Contatos
• http://rodrigocandido.me
![Page 3: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/3.jpg)
Agenda• Spring Data • Arquitetura REST
• RESTful Services • HATEOAS • HAL
• Spring Data REST • Demo
![Page 4: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/4.jpg)
Spring Data
![Page 5: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/5.jpg)
Spring Data
![Page 6: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/6.jpg)
Spring Data
![Page 7: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/7.jpg)
Spring Data
@Entityclass Person {
@Id@GeneratedValue( strategy=GenerationType.AUTO )private BigInteger id;private String firstname, lastname;
@Column( name=„email“ ) private String emailAddress;
@OneToMany private Set<Person> colleagues;
}
JPA Entity
![Page 8: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/8.jpg)
Spring DataJPA Repository
public interface PersonRepository extends Repository<Person, BigInteger>{
// Finder for a single entityPerson findByEmailAddress(String emailAddress);
// Finder for multiple entitiesList<Person> findByLastnameLike(String lastname);
// Finder with paginationPage<Person> findByFirstnameLike(String firstname, Pageable page);
// Geospatial queriesList<Person> findByLocationNear(Point location, Distance distance);GeoResults<Person> findByLocationNear(Point location);
}
![Page 9: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/9.jpg)
Spring DataMongoDB Document
@Documentclass Person {
@Id private BigInteger id;@Indexed private String firstname, lastname;@Field( „email“ ) private String emailAddress;@DBRef private Set<Person> colleagues;
public Person(String firstname) { … }
@PersistenceConstructorpublic Person(String firstname, String lastname) { … }
…}
![Page 10: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/10.jpg)
Spring DataMongoDB Template
// Setup infrastructureMongo mongo = new Mongo();MongoDbFactory factory = new SimpleMongoDbFactory(mongo, “foo“ );MongoTemplate template = new MongoTemplate(factory);
// Create and save entityPerson dave = new Person( “Dave“ , “Matthews“ );dave.setEmailAddress( “[email protected]“ );template.save(person);
// Query entityQuery query = new Query( new Criteria( “emailAddress“ )
.is( “[email protected]“ ));assertThat(template.find(query), is(dave));
![Page 11: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/11.jpg)
Web Service API’s
![Page 12: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/12.jpg)
Arquitetura REST
![Page 13: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/13.jpg)
Arquitetura REST• ︎Protocolo cliente/servidor sem estado (HTTP) • ︎Operações bem definidas
• GET • POST • PUT • DELETE, etc
• ︎Sintaxe universal para identificação de recursos (URL)
• ︎Transferência de informações em formato padrão (XML, HTML, JSON)
![Page 14: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/14.jpg)
Richardson Maturity Model
![Page 15: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/15.jpg)
RESTful Services
![Page 16: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/16.jpg)
HATEOAS• Hypermedia As The Engine of Application State • Descrevem o estado atual da aplicação e como navegar para o próximo estado
![Page 17: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/17.jpg)
![Page 18: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/18.jpg)
HAL"Convenção para definição de REST hypermedia"
![Page 19: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/19.jpg)
Spring Data REST
![Page 20: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/20.jpg)
Spring Data REST• Padrões comuns para Spring Data Repositories • Incrementa o suporte hypermedia
• HAL, ALPS, JSON Schema, URI templates, etc • Suporta
• JPA, GemFire, Neo4j, MongoDB • Demais estão por vir…
![Page 21: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/21.jpg)
Spring Data REST
![Page 23: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/23.jpg)
HAL Browser
![Page 24: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/24.jpg)
Demo• Spring Data REST • https://github.com/rcandidosilva/spring-data-rest-sample
![Page 25: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/25.jpg)
![Page 26: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/26.jpg)
Conclusões…• REST é uma necessidade das aplicações web atuais • Spring Data oferece uma ótima infra-estrutura para implementação de lógica de persistência
• Spring Data REST agiliza a implementação de endpoints REST
• CRUD + REST == Spring Data REST • Enjoy it ;)
![Page 27: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST](https://reader031.vdocuments.net/reader031/viewer/2022021502/5871ab9a1a28abda6a8b58d5/html5/thumbnails/27.jpg)
Perguntas
?