Spring Data REST oferece uma customização no topo do projeto Spring Data que exporta os repositórios automaticamente como serviços REST. Implementa conceitos e boas práticas em arquiteturas REST, como RESTful, ALPS, HATEOAS, permitindo os clientes encontrarem e explorarem as funcionalidades expostas de uma maneira fácil e organizada.
Esta palestra irá abordar como desenvolver rapidamente uma API de microservicos REST utilizando Spring Boot e Spring Data REST. Será principalmente orientada a exemplos de código demonstrando a implementação destas tecnologias.
7. Spring Data
@Entity
class 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
8. Spring Data
JPA Repository
public interface PersonRepository extends Repository<Person, BigInteger>
{
// Finder for a single entity
Person findByEmailAddress(String emailAddress);
// Finder for multiple entities
List<Person> findByLastnameLike(String lastname);
// Finder with pagination
Page<Person> findByFirstnameLike(String firstname, Pageable page);
// Geospatial queries
List<Person> findByLocationNear(Point location, Distance distance);
GeoResults<Person> findByLocationNear(Point location);
}
9. Spring Data
MongoDB Document
@Document
class Person {
@Id private BigInteger id;
@Indexed private String firstname, lastname;
@Field( „email“) private String emailAddress;
@DBRef private Set<Person> colleagues;
public Person(String firstname) { … }
@PersistenceConstructor
public Person(String firstname, String lastname) { … }
…
}
10. Spring Data
MongoDB Template
// Setup infrastructure
Mongo mongo = new Mongo();
MongoDbFactory factory = new SimpleMongoDbFactory(mongo, “foo“ );
MongoTemplate template = new MongoTemplate(factory);
// Create and save entity
Person dave = new Person( “Dave“ , “Matthews“ );
dave.setEmailAddress( “dave@dmband.com“ );
template.save(person);
// Query entity
Query query = new Query( new Criteria( “emailAddress“ )
.is( “dave@dmband.com“ ));
assertThat(template.find(query), is(dave));
13. 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)
20. 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…
24. Demo
• Spring Data REST
• https://github.com/rcandidosilva/spring-data-rest-sample
25.
26. 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 ;)