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}