Introdução ao Spring Data REST
1. Visão geral
Este artigo explicará os fundamentos deSpring Data RESTe mostrará como usá-lo para construir uma API REST simples.
Em geral, o Spring Data REST é construído sobre o projeto Spring Data e facilita a criação de serviços da Web REST direcionados à hipermídia que se conectam aos repositórios do Spring Data - todos usando HAL como o tipo de hipermídia principal.
Ele retira muito do trabalho manual geralmente associado a essas tarefas e simplifica bastante a implementação da funcionalidade básica CRUD para aplicativos da web.
2. Dependências do Maven
As seguintes dependências do Maven são necessárias para nosso aplicativo simples:
org.springframework.boot
spring-boot-starter
org.springframework.boot spring-boot-starter-data-rest
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
Decidimos usar o Spring Boot neste exemplo, mas o Spring clássico também funcionará bem. Também optamos por usar o banco de dados incorporado H2 para evitar qualquer configuração extra, mas o exemplo pode ser aplicado a qualquer banco de dados.
3. Escrevendo o aplicativo
Começaremos escrevendo um objeto de domínio para representar um usuário do nosso site:
@Entity
public class WebsiteUser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String email;
// standard getters and setters
}
Todo usuário tem um nome e um email, além de um ID gerado automaticamente. Agora podemos escrever um repositório simples:
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository {
List findByName(@Param("name") String name);
}
Esta é uma interface que permite realizar várias operações com objetosWebsiteUser. Também definimos uma consulta personalizada que fornecerá uma lista de usuários com base em um determinado nome.
A anotação@RepositoryRestResource é opcional e é usada para personalizar o terminal REST. Se decidirmos omiti-lo, o Spring criará automaticamente um endpoint em “/websiteUsers” em vez de “/users“.
Finalmente, iremos escrever um padrãoSpring Boot main class to initialize the application:
@SpringBootApplication
public class SpringDataRestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDataRestApplication.class, args);
}
}
É isso aí! Agora temos uma API REST totalmente funcional. Vamos dar uma olhada em ação.
4. Acessando a API REST
Se executarmos o aplicativo e formos parahttp://localhost:8080/ em um navegador, receberemos o seguinte JSON:
{
"_links" : {
"users" : {
"href" : "http://localhost:8080/users{?page,size,sort}",
"templated" : true
},
"profile" : {
"href" : "http://localhost:8080/profile"
}
}
}
Como você pode ver, há um endpoint “/users” disponível e já tem as opções “?page“, “?size” e “?sort”.
Também existe um ponto de extremidade padrão “/profile”, que fornece metadados do aplicativo. É importante observar que a resposta está estruturada de uma maneira que segue as restrições do estilo de arquitetura REST. Especificamente, ele fornece uma interface uniforme e mensagens auto-descritivas. Isso significa que cada mensagem contém informações suficientes para descrever como processá-la.
Ainda não há usuários em nosso aplicativo, então ir parahttp://localhost:8080/users mostraria apenas uma lista vazia de usuários. Vamos usar curl para adicionar um usuário.
$ curl -i -X POST -H "Content-Type:application/json" -d '{ "name" : "Test", \
"email" : "[email protected]" }' http://localhost:8080/users
{
"name" : "test",
"email" : "[email protected]",
"_links" : {
"self" : {
"href" : "http://localhost:8080/users/1"
},
"websiteUser" : {
"href" : "http://localhost:8080/users/1"
}
}
}
Vamos dar uma olhada nos cabeçalhos de resposta também:
HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Você notará que o tipo de conteúdo retornado é “application/hal+json“. HAL é um formato simples que oferece uma maneira consistente e fácil de criar um hiperlink entre recursos em sua API. O cabeçalho também contém automaticamente o cabeçalhoLocation, que é o endereço que podemos usar para acessar o usuário recém-criado.
Agora podemos acessar este usuário emhttp://localhost:8080/users/1
{
"name" : "test",
"email" : "[email protected]",
"_links" : {
"self" : {
"href" : "http://localhost:8080/users/1"
},
"websiteUser" : {
"href" : "http://localhost:8080/users/1"
}
}
}
Você também pode usar curl ou qualquer outro cliente REST para emitir solicitações PUT, PATCH e DELETE. Também é importante observar que o Spring Data REST segue automaticamente os princípios do HATEOAS. HATEOAS é uma das restrições do estilo de arquitetura REST e significa que o hipertexto deve ser usado para encontrar seu caminho através da API.
Por fim, vamos tentar acessar a consulta personalizada que escrevemos anteriormente e encontrar todos os usuários com o nome "test". Isso é feito indo parahttp://localhost:8080/users/search/findByName?name=test
{
"_embedded" : {
"users" : [ {
"name" : "test",
"email" : "[email protected]",
"_links" : {
"self" : {
"href" : "http://localhost:8080/users/1"
},
"websiteUser" : {
"href" : "http://localhost:8080/users/1"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/users/search/findByName?name=test"
}
}
}
5. Conclusão
[.iframe-fluid] ## Este tutorial demonstrou os fundamentos da criação de uma API REST simples com Spring Data REST. O exemplo usado neste artigo pode ser encontrado no linkGitHub project.