/* * Copyright 2013 Agorava * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.agorava.api.rest; import java.util.Map; import java.util.concurrent.TimeUnit; /** * A REST request * * @author Antoine Sabot-Durand */ public interface Request { /** * Execute the request and return a {@link Response} * * @param tuner a tuner to alter request behavior * @return the response from remote tier * @throws RuntimeException if the connection cannot be created. */ Response send(RequestTuner tuner); /** * Execute the request and return a {@link Response} * * @return the response from remote tier */ Response send(); /** * Returns the complete url (host + resource + encoded querystring parameters). * * @return the complete url. */ String getCompleteUrl(); /** * Add an HTTP HEADER to the Request * * @param key the header name * @param value the header value */ void addHeader(String key, String value); /** * Add a body Parameter (for POST/ PUT Requests) * * @param key the parameter name * @param value the parameter value */ void addBodyParameter(String key, String value); /** * Add a QueryString parameter * * @param key the parameter name * @param value the parameter value */ void addQuerystringParameter(String key, String value); /** * Add body payload from a String * * @param payload the payload to add to body */ void addPayload(String payload); /** * Add body payload from an Array of bytes * * @param payload the payload to add to body */ void addPayload(byte[] payload); /** * Get a {@link HttpParameters} with the query string parameters. * * @return a parameter list containing the query string parameters. * @throws org.agorava.api.exception.AgoravaException if the request URL is not valid. */ HttpParameters getQueryStringParams(); /** * Obtains a {@link HttpParameters} of the body parameters. * * @return a a parameter list containing the query string parameters containing the body parameters. */ HttpParameters getBodyParams(); /** * Obtains the URL of the HTTP Request. * * @return the original URL of the HTTP Request */ String getUrl(); /** * Returns the URL without the port and the query string part. * * @return the OAuth-sanitized URL */ String getSanitizedUrl(); /** * Returns the body of the request * * @return form encoded string * @throws org.agorava.api.exception.AgoravaException if the charset chosen is not supported */ String getBodyContents(); /** * Returns the HTTP Verb * * @return the verb */ Verb getVerb(); /** * Returns the connection headers as a {@link java.util.Map} * * @return map of headers */ Map<String, String> getHeaders(); /** * Returns the connection charset. Defaults to {@link java.nio.charset.Charset} defaultCharset if not set * * @return charset */ String getCharset(); /** * Set the charset of the body of the request * * @param charsetName name of the charset of the request */ void setCharset(String charsetName); /** * Sets the connect timeout for the underlying {@link java.net.HttpURLConnection} * * @param duration duration of the timeout * @param unit unit of time (milliseconds, seconds, etc) */ void setConnectTimeout(int duration, TimeUnit unit); /** * Sets the read timeout for the underlying {@link java.net.HttpURLConnection} * * @param duration duration of the timeout * @param unit unit of time (milliseconds, seconds, etc) */ void setReadTimeout(int duration, TimeUnit unit); /** * Sets whether the underlying Http Connection is persistent or not. * * @param connectionKeepAlive if true the connection is persistent * @see <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html">JSE doc on http * keepalive</a> */ void setConnectionKeepAlive(boolean connectionKeepAlive); /** * Add Body parameters from a map * * @param params map containing parameters to add */ void addBodyParameters(Map<String, ? extends Object> params); }