JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
-
Upload
rodrigo-candido-da-silva -
Category
Technology
-
view
364 -
download
0
Transcript of JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
RESTful services simplificado com Spring Data RESTRodrigo Cândido da Silva @rcandidosilva
About Me• Software Architect
• http://integritastech.com • JUG Leader do GUJavaSC
• http://gujavasc.org • Twitter
• @rcandidosilva • Contatos
• http://rodrigocandido.me
Agenda• Spring Data • Arquitetura REST
• RESTful Services • HATEOAS • HAL
• Spring Data REST • Demo
Spring Data
Spring Data
Spring Data
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
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);
}
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) { … }
…}
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));
Web Service API’s
Arquitetura 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)
Richardson Maturity Model
RESTful Services
HATEOAS• Hypermedia As The Engine of Application State • Descrevem o estado atual da aplicação e como navegar para o próximo estado
HAL"Convenção para definição de REST hypermedia"
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…
Spring Data REST
HAL Browser
Demo• Spring Data REST • https://github.com/rcandidosilva/spring-data-rest-sample
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 ;)
Perguntas
?