Java
REST
REST client
programming
web development

How do you create a REST client for Java?

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

Creating a REST client in Java involves several steps and can vary depending on the libraries and tools you choose. In this article, we will explore how to implement a REST client using some popular Java libraries, including Java's built-in HTTP client, Apache HttpClient, OkHttp, and the JAX-RS Client API.

REST Client in Java

1. Choosing the Right Library

  • Java's Built-in HTTP Client: Ideal for simple use cases and projects using Java 11 and above.
  • Apache HttpClient: Known for its robustness and support for various HTTP features.
  • OkHttp: Widely used for Android apps; efficient and easy to use.
  • JAX-RS Client API: Useful when developing with Jersey or integrating with Java EE applications.

Each library has its strengths, and the choice largely depends on your project's requirements.

2. Java's Built-in HTTP Client

Introduced in Java 11, this built-in client provides a modern implementation of HTTP/1.1 and HTTP/2.

Example

java
1import java.net.URI;
2import java.net.http.HttpClient;
3import java.net.http.HttpRequest;
4import java.net.http.HttpResponse;
5
6public class HttpClientExample {
7    public static void main(String[] args) throws Exception {
8        HttpClient client = HttpClient.newHttpClient();
9        HttpRequest request = HttpRequest.newBuilder()
10            .uri(new URI("https://api.example.com/data"))
11            .GET()
12            .build();
13
14        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
15
16        System.out.println(response.statusCode());
17        System.out.println(response.body());
18    }
19}

3. Using Apache HttpClient

Apache HttpClient is a popular choice for its extensive configurability and performance.

Example

java
1import org.apache.http.HttpEntity;
2import org.apache.http.client.methods.CloseableHttpResponse;
3import org.apache.http.client.methods.HttpGet;
4import org.apache.http.impl.client.CloseableHttpClient;
5import org.apache.http.impl.client.HttpClients;
6import org.apache.http.util.EntityUtils;
7
8public class ApacheHttpClientExample {
9    public static void main(String[] args) throws Exception {
10        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
11            HttpGet request = new HttpGet("https://api.example.com/data");
12            try (CloseableHttpResponse response = httpClient.execute(request)) {
13                HttpEntity entity = response.getEntity();
14                if (entity != null) {
15                    System.out.println(EntityUtils.toString(entity));
16                }
17            }
18        }
19    }
20}

4. Using OkHttp

OkHttp is considered lightweight and efficient, making it a preferred choice for many applications, especially for Android.

Example

java
1import okhttp3.OkHttpClient;
2import okhttp3.Request;
3import okhttp3.Response;
4
5import java.io.IOException;
6
7public class OkHttpExample {
8    public static void main(String[] args) throws IOException {
9        OkHttpClient client = new OkHttpClient();
10
11        Request request = new Request.Builder()
12            .url("https://api.example.com/data")
13            .build();
14
15        try (Response response = client.newCall(request).execute()) {
16            System.out.println(response.body().string());
17        }
18    }
19}

5. JAX-RS Client API

If you're using Jersey or JAX-RS frameworks, you can take advantage of the JAX-RS Client API for integration with RESTful services.

Example

java
1import javax.ws.rs.client.Client;
2import javax.ws.rs.client.ClientBuilder;
3import javax.ws.rs.client.WebTarget;
4import javax.ws.rs.core.MediaType;
5
6public class JaxRsClientExample {
7    public static void main(String[] args) {
8        Client client = ClientBuilder.newClient();
9        WebTarget target = client.target("https://api.example.com/data");
10
11        String response = target.request(MediaType.APPLICATION_JSON).get(String.class);
12        System.out.println(response);
13    }
14}

Summary Table

LibraryFeaturesBest suited for
Built-in HTTP ClientHTTP/1.1, HTTP/2Simple use cases Projects with Java 11+
Apache HttpClientRobust & extensive supportAdvanced HTTP features Long-term projects
OkHttpEfficient, Android supportAndroid applications Lightweight solutions
JAX-RS Client APIJAX-RS integrationJava EE projects Jersey-based services

Additional Considerations

  • Authentication: When interacting with secure APIs, consider how your chosen library handles authentication (e.g., Basic Auth, OAuth).
  • Error Handling: Implement comprehensive error handling to manage exceptions and retry strategies.
  • Asynchronous Requests: Some libraries support asynchronous requests, allowing you to free up resources and improve performance during HTTP calls.
  • Performance Tuning: Explore connection pooling and timeout settings to optimize performance for high-demand applications.

By selecting the right library and considering additional features like authentication and error handling, you can efficiently create a REST client in Java tailored to your application's needs.


Related reading
Course
Intermediate
27 lessons
14 hours
OOD Fundamentals

Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions