Como usar Rest Client em Quarkus

Posted by : at

Category : quarkus


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_


About Luiz Leite
Luiz Leite

Oi Eu sou o Luiz, principal na Hotmart e tenho esse blog para contar o que eu aprendo diariamente.

Email : xp.luiz@gmail.com

Website : https://luizleiteoliveira.github.io

About Luiz Leite Oliveira

Hi, my name is Luiz Leite. This is the site where I share some things

Star -->
Useful Links