Ir para o conteúdo

Integração de APIs com o OpenFeign

2 min. de leitura

Avatar de Nataniel Freire de Paiva Amorim

Nataniel Freire de Paiva Amorim Autor


Fala, galera!!! Quantas vezes você já precisou fazer integração de backend para backend?

Pois é, muitos devs estão bem acostumados a criar suas integrações utilizando o tão conhecido RestTemplate, mas dessa vez eu decidi fazer um pequeno artigo mostrando o quão fácil e simples é criar uma integração utilizando Spring Cloud OpenFeign. Isso mesmo! Você vai ver o quão simples é fazer uma integração de APIs utilizando esse cara.

Então, vamos lá! Criei dois projetos com essas libs do Spring:

  • Lombok para diminuir a quantidade de códigos que vamos escrever
  • OpenFeign para fazer de fato a nossa integração entre os dois projetos
  • Spring Web só para subir o servidor Apache Tomcat

Feito isso, vamos pegar o nosso projeto chamado aula e criar um simples endpoint com o seguinte código:


package exemplointegracao.aula;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("usuario")
public class UsuarioController {

    @GetMapping
    public UsuarioResponse retornaUsuario(){
        return UsuarioResponse.builder().id(1L).nome("Nataniel Paiva").idade(29).build();
    }

}

Como na controller estamos usando o UsuarioResponse, segue o código de criação do UsuarioResponse:

package exemplointegracao.aula;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class UsuarioResponse {

    private Long id;
    private String nome;
    private int idade;
}

Pronto! Vamos subir o nosso primeiro projeto utilizando o spring-boot:run e ele estará rodando na porta 8080.

Agora vamos ao segundo projeto que eu batizei de aula2. Nesse projeto nós vamos mudar a porta no application.properties usando o server.port=5000 e vamos configurar o projeto para utilizar o OpenFeign. Veja a classe abaixo:

package exemplointegracao.aula2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients // adicionar essa annotation
public class Aula2Application {

	public static void main(String[] args) {
		SpringApplication.run(Aula2Application.class, args);
	}

}

Depois disso vamos criar a nossa interface de acesso para a outra API, lembrando que o ideal é utilizar propriedades e não colocar na unha, assim como fiz nesse exemplo, como é para ser o mais didático possível coloquei na unha:

package exemplointegracao.aula2;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "usuario", url = "http://localhost:8080/usuario")
public interface UsuarioAula1 {
    @RequestMapping(method = RequestMethod.GET, value = "/")
    UsuarioResponse retornaUsuario();
}

Pronto! Feito isso, basta utilizar a nossa interface em um endpoint e veremos o resultado:

package exemplointegracao.aula2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("usuario2")
public class UsuarioController {

    @Autowired
    UsuarioAula1 usuarioAula1;

    @GetMapping
    public UsuarioResponse retornaUsuario(){
        return usuarioAula1.retornaUsuario();
    }

}

Se acessarmos a URL http://localhost:5000/usuario2 com os dois projetinhos rodando, vamos ter o seguinte resultado:

Viu como é simples integrar APIs utilizando esse cara? Caso queira ver os códigos desse artigo, basta acessar:

https://github.com/natanielpaiva/exemplo-integracao-apis

Se mesmo assim ainda ficou com dúvida, assista esse vídeo:

https://youtu.be/zRZuZrwYYc0

Espero ter ajudado alguém! Até a próxima!!!