DEV Community

Cover image for Integrating Spring Boot with Third-Party APIs
Igor Venturelli
Igor Venturelli

Posted on • Originally published at igventurelli.io

Integrating Spring Boot with Third-Party APIs

Learn how to integrate Spring Boot with third-party APIs using Feign

In today’s microservice architecture, it’s common for applications to communicate with third-party services. Spring Boot makes it seamless to integrate these APIs with a variety of tools. While developers have traditionally used RestTemplate, its deprecation has shifted focus to more modern solutions, like Spring Cloud OpenFeign. In this blog, we’ll dive into the integration of Spring Boot with third-party APIs, focusing on using Feign and showcasing practical examples, including handling authentication and request customization.

Why Feign?

Feign is a declarative web service client. It simplifies HTTP API calls by allowing developers to write minimal boilerplate code and focus on business logic. With Feign, we can define HTTP clients as simple interfaces, leaving the rest to Spring Boot and Spring Cloud, which manage the heavy lifting.

RestTemplate: Deprecated but not Forgotten

Before jumping into Feign, it's worth mentioning that Spring’s RestTemplate has been the go-to solution for HTTP calls for years. However, it's now deprecated in favor of Feign or the more powerful WebClient (from Spring WebFlux). The Spring team encourages developers to migrate to these modern alternatives for future-proof applications.

Getting Started with Feign

First, to use Feign in a Spring Boot project, we need to add the relevant dependency in pom.xml:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Ensure that you have the Spring Cloud version configured in your pom.xml.

Next, you need to enable Feign clients in your Spring Boot application by annotating the main class with @EnableFeignClients:

@SpringBootApplication
@EnableFeignClients
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Enter fullscreen mode Exit fullscreen mode

Defining a Feign Client Interface

Feign allows you to define API clients declaratively using interfaces. Here’s an example of an API client that connects to a fictional external service:

@FeignClient(name = "thirdPartyApi", url = "https://api.example.com")
public interface ThirdPartyApiClient {

    @GetMapping("/data")
    DataResponse getData();

    @PostMapping("/data")
    DataResponse createData(@RequestBody DataRequest request);
}
Enter fullscreen mode Exit fullscreen mode

By simply defining methods with the appropriate HTTP annotations like @GetMapping and @PostMapping, Feign knows how to map these methods to API endpoints.

Adding Authentication

One common scenario is interacting with APIs that require Authentication. You can achieve this in Feign by configuring a RequestInterceptor, which allows you to modify outgoing requests before they are sent.

Here’s an example of a Feign configuration class that adds Basic Authentication headers:

public class FeignClientConfig {

    @Bean
    public RequestInterceptor basicAuthRequestInterceptor() {
        return requestTemplate -> {
            String auth = "user:password";
            byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
            String authHeader = "Basic " + new String(encodedAuth);
            requestTemplate.header("Authorization", authHeader);
        };
    }
}
Enter fullscreen mode Exit fullscreen mode

💡

Heads Up! This is a simple example. For real world scenarios there are better ways to achieve this. The intention here is to show how you can customize/modify a request before sending it and without passing these data through method arguments.

You can apply this configuration to your Feign client using the configuration attribute:

@FeignClient(name = "thirdPartyApi", url = "https://api.example.com", configuration = FeignClientConfig.class)
public interface ThirdPartyApiClient {
    // methods...
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

Integrating with third-party APIs is a crucial part of modern application development. With Spring Boot and Feign, you can make this process simple, clean, and flexible. While RestTemplate has served developers well over the years, the power and simplicity of Feign make it the future of API integration in Spring applications. Whether you need authentication, custom headers, or request logging, Feign provides the tools necessary to build scalable and maintainable integrations.


Let’s connect!

📧 Don't Miss a Post! Subscribe to my Newsletter!
➡️ LinkedIn
🚩 Original Post
☕ Buy me a Coffee

Top comments (0)