java-restify
Search…
Início rápido
O funcionamento do java-restify é baseado em proxies de interfaces.
Primeiro, precisamos de uma interface Java para abstrair a API que desejamos consumir. Com o uso de algumas anotações, podemos representar os detalhes das requisições HTTP.
1
import com.github.ljtfreitas.restify.http.contract.Path;
2
import com.github.ljtfreitas.restify.http.contract.Get;
3
import com.github.ljtfreitas.restify.http.contract.Post;
4
import com.github.ljtfreitas.restify.http.contract.BodyParameter;
5
import com.github.ljtfreitas.restify.http.contract.PathParameter;
6
7
@Path("http://whatever.api.com")
8
public interface WhateverApi {
9
10
@Path("/resource") @Get
11
String getResource();
12
13
@Path("/resource/{id}") @Get
14
String getResourceById(@PathParameter("id") String id);
15
16
@Path("/resource") @Post
17
String createResource(@BodyParameter String content);
18
}
Copied!
Os métodos da interface acima irão se comportar da seguinte maneira:
  • o método getResource irá realizar uma chamada HTTP GET para a URL http://whatever.api.com/resource
  • o método getResourceById irá realizar uma chamada HTTP GET para a URL http://whatever.api.com/resource/{id}, sendo que o placeholder "{id}" será substituído pelo valor do parâmetro anotado com @PathParameter.
  • o método createResource irá realizar uma chamada HTTP POST para a URL http://whatever.api.com/resource, e o valor do parâmetro anotado com @BodyParameter será enviado no corpo da requisição.
Agora, precisamos criar uma instância dessa interface. Para criá-la, usamos o objeto RestifyProxyBuilder.
1
import com.github.ljtfreitas.restify.http.RestifyProxyBuilder;
2
3
WhateverApi whateverApi = new RestifyProxyBuilder()
4
.target(WhateverApi.class)
5
.build();
Copied!
Também é possível definir a URL base da API no builder, ao invés da anotação @Path no topo da interface.
1
import com.github.ljtfreitas.restify.http.RestifyProxyBuilder;
2
3
WhateverApi whateverApi = new RestifyProxyBuilder()
4
.target(WhateverApi.class, "http://whatever.api.com")
5
.build();
Copied!
Por padrão, você pode utilizar apenas String, byte[] ou InputStream como retornos de método, para obter a resposta da requisição. Mas existem diversos plugins que extendem esse comportamento, permitindo utilizar vários objetos diferentes.
No exemplo abaixo, vamos consumir a API do GitHub (que utiliza JSON), deserializando a resposta para um objeto. Podemos utilizar o Jackson para lidar com o JSON, e para usá-lo com o java-restify, precisamos adicionar a dependência java-restify-json-jackson-converter. Com essa dependência no seu classpath, o java-restify irá registrar automaticamente um componente que utiliza o Jackson para serializar/deserializar requisições e respostas no formato JSON.
Usando o Maven:
1
<dependency>
2
<groupId>com.github.ljtfreitas</groupId>
3
<artifactId>java-restify-json-jackson-converter</artifactId>
4
<version>{version}</version>
5
</dependency>
Copied!
Ou o Gradle:
1
dependencies {
2
compile("com.github.ljtfreitas:java-restify-json-jackson-converter:{version}")
3
}
Copied!
Primeiro, criamos os objetos representando a API do Github.
1
@Path("https://api.github.com")
2
interface GitHub {
3
4
@Path("/repos/{owner}/{repo}/contributors")
5
@Get
6
public List<Contributor> contributors(
7
@PathParameter("owner") String owner,
8
@PathParameter("repo") String repo);
9
}
10
11
@JsonIgnoreProperties(ignoreUnknown = true)
12
class Contributor {
13
14
@JsonProperty
15
private String login;
16
17
@JsonProperty
18
private int contributions;
19
20
@Override
21
public String toString() {
22
return "Contributor: [" + login + "] - " + contributions + " contributions.";
23
}
24
}
Copied!
Agora podemos utilizar o RestifyProxyBuilder para obter uma instância da interface.
1
GitHub gitHub = new RestifyProxyBuilder()
2
.target(GitHub.class)
3
.build();
4
5
/*
6
A chamada do método "contributors" vai realizar um GET para https://api.github.com/repos/ljtfreitas/java-restify/contributors.
7
O "bind" dos argumentos do método com o path é realizado utilizando o nome dos parâmetros.
8
A resposta da API do GitHub está no formato application/json; o java-restify irá automaticamente deserializar o JSON de resposta para o tipo de retorno do método
9
*/
10
11
gitHub.contributors("ljtfreitas", "java-restify")
12
.forEach(System.out::println);
13
14
/*
15
output:
16
17
Contributor: [ljtfreitas] - 127 contributions.
18
*/
Copied!
Last modified 2yr ago
Copy link