DEV Community

Luiz Leite Oliveira
Luiz Leite Oliveira

Posted on

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_

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay