JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

28
RESTful services simplificado com Spring Data REST Rodrigo Cândido da Silva @rcandidosilva

Transcript of JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Page 1: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

RESTful services simplificado com Spring Data RESTRodrigo Cândido da Silva @rcandidosilva

Page 2: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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

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

Spring Data

Page 5: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Spring Data

Page 6: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Spring Data

Page 7: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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

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

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

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

Web Service API’s

Page 12: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Arquitetura REST

Page 13: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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

Richardson Maturity Model

Page 15: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

RESTful Services

Page 16: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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
Page 18: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

HAL"Convenção para definição de REST hypermedia"

Page 19: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Spring Data REST

Page 20: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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

Spring Data REST

Page 22: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Spring Data REST

$ curl “http://localhost:8080/persons/1”

Page 23: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

HAL Browser

Page 24: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Demo• Spring Data REST • https://github.com/rcandidosilva/spring-data-rest-sample

Page 25: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Page 26: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

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

Perguntas

?

Page 28: JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST

Muito obrigado! @rcandidosilva

rodrigocandido.me