javaone latam 2016 - restful services simplificado com spring data rest

Post on 08-Jan-2017

364 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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( “dave@dmband.com“ );template.save(person);

// Query entityQuery query = new Query( new Criteria( “emailAddress“ )

.is( “dave@dmband.com“ ));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

Spring Data REST

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

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

?

Muito obrigado! @rcandidosilva

rodrigocandido.me

top related