Como usar Rest Client em Quarkus
Tudo que está nesse projeto pode ser encontrado no repositório GitHub.
Para criar o projeto utilizamos o próprio site de bootstrap do quarkus para criar o seu pode acessar aqui.
Dependências adicionadas
As dependências que vamos usar podem ser encontradas diretamente pelo bootstrap. São as seguintes:
- JSON-B Utilizada para fazer json bind automático
- REST Cliente Utilizada para criar chamada rest
Para quem usa maven as dependencias vão ficar assim:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
e em gradle:
io.quarkus:quarkus-rest-client
io.quarkus:quarkus-resteasy-jsonb
Background do projeto
Para facilitar a utilização do projeto vamos usar uma api já pronta que retorna usuários aleatórios, ela pode ser encontrada no site randomuser.me
Para ele vamos utilizar uma chamada no endpoint https://randomuser.me/api/
Quando fazemos um get nesse endpoint recebemos um usuário aleatório no formato de json como o a seguir:
{
"results": [
{
"gender": "male",
"name": {
"title": "mr",
"first": "brad",
"last": "gibson"
},
"location": {
"street": "9278 new road",
"city": "kilcoole",
"state": "waterford",
"postcode": "93027",
"coordinates": {
"latitude": "20.9267",
"longitude": "-7.9310"
},
"timezone": {
"offset": "-3:30",
"description": "Newfoundland"
}
},
"email": "brad.gibson@example.com",
"login": {
"uuid": "155e77ee-ba6d-486f-95ce-0e0c0fb4b919",
"username": "silverswan131",
"password": "firewall",
"salt": "TQA1Gz7x",
"md5": "dc523cb313b63dfe5be2140b0c05b3bc",
"sha1": "7a4aa07d1bedcc6bcf4b7f8856643492c191540d",
"sha256": "74364e96174afa7d17ee52dd2c9c7a4651fe1254f471a78bda0190135dcd3480"
},
"dob": {
"date": "1993-07-20T09:44:18.674Z",
"age": 26
},
"registered": {
"date": "2002-05-21T10:59:49.966Z",
"age": 17
},
"phone": "011-962-7516",
"cell": "081-454-0666",
"id": {
"name": "PPS",
"value": "0390511T"
},
"picture": {
"large": "https://randomuser.me/api/portraits/men/75.jpg",
"medium": "https://randomuser.me/api/portraits/med/men/75.jpg",
"thumbnail": "https://randomuser.me/api/portraits/thumb/men/75.jpg"
},
"nat": "IE"
}
],
"info": {
"seed": "fea8be3e64777240",
"results": 1,
"page": 1,
"version": "1.3"
}
}
Caso chamemos o mesmo endpoint mas dessa vez com um Query Param results=N
ele traz N resultados pra gente.
Modelagem
Os dados vão ser modelados da seguinte forma:
### Names.java A classe name é utilizada para criar a parte name
do usuário, que tem os campos String title
, first
, last
package org.luizleiteoliveira.entity;
public class Names {
private String title;
private String first;
private String last;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
User.java
Para modelar o usuário a api vem com diversos campos, vamos utilizar além do objeto name
, email
, gender
, phone
, cell
, nat
:
package org.luizleiteoliveira.entity;
public class User {
private String email;
private String gender;
private Names name;
private String phone;
private String cell;
private String nat;
public User() {}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Names getName() {
return name;
}
public void setName(Names name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getCell() {
return cell;
}
public void setCell(String cell) {
this.cell = cell;
}
public String getNat() {
return nat;
}
public void setNat(String nat) {
this.nat = nat;
}
}
Results.java
Pra finalizar a classe que faz ficam todos os nossos resultados, pra nossa modelagem só vai conter uma lista de usuários.
package org.luizleiteoliveira.entity;
import java.util.List;
public class Results {
private List<User> results;
public Results() {}
public List<User> getResults() {
return results;
}
public void setResults(List<User> results) {
this.results = results;
}
}
Conclusão
Eu fiquei bem feliz com o modo que foi implementado, achei extremamente simples e intuitivo. Usar as mesmas notações para registrar o controller você utilizar pra executar a chamada facilita muito.
Quer acompanhar um pouco mais? Me siga nas plataformas.
GitHub: luizleite-hotmart
Twitter: luizleite_
Twitch: coffee_and_code
Linkedin: luizleiteoliveira
dev.to: luizleite_