001 002package io.vrap.rmf.base.client; 003 004import java.net.URI; 005import java.util.concurrent.CompletableFuture; 006 007import com.fasterxml.jackson.core.type.TypeReference; 008import com.fasterxml.jackson.databind.JavaType; 009 010import io.vrap.rmf.base.client.http.HandlerStack; 011 012/** 013 * Interface for an HTTP client accessing the API and mapping to a known output type 014 */ 015public interface ApiHttpClient extends AutoCloseable, VrapHttpClient { 016 public String CLOSED_MESSAGE = "Client is already closed."; 017 018 public <O> CompletableFuture<ApiHttpResponse<O>> execute(final ApiHttpRequest request, final Class<O> outputType); 019 020 public <O> CompletableFuture<ApiHttpResponse<O>> execute(final ApiHttpRequest request, 021 final TypeReference<O> outputType); 022 023 public <O> CompletableFuture<ApiHttpResponse<O>> execute(final ApiHttpRequest request, final JavaType outputType); 024 025 public <O> CompletableFuture<ApiHttpResponse<O>> execute(final ClientRequestCommand<O> method); 026 027 public ResponseSerializer getSerializerService(); 028 029 public URI getBaseUri(); 030 031 public static ApiHttpClient of(final String baseUri, final HandlerStack stack) { 032 return of(URI.create(baseUri), stack, ResponseSerializer.of()); 033 } 034 035 public static ApiHttpClient of(final URI baseUri, final HandlerStack stack) { 036 return of(baseUri, stack, ResponseSerializer.of()); 037 } 038 039 public static ApiHttpClient of(final String baseUri, final HandlerStack stack, 040 final ResponseSerializer serializer) { 041 return of(URI.create(baseUri), stack, serializer); 042 } 043 044 public static ApiHttpClient of(final URI baseUri, final HandlerStack stack, final ResponseSerializer serializer) { 045 return new ApiHttpClientImpl(baseUri, stack, serializer); 046 } 047}