Java tutorial
/* * Copyright 2014-2015 GameUp * * 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 io.gameup.android.http; import android.net.Uri; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import io.gameup.android.GameUp; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.NonNull; import okio.ByteString; /** * Utility class that provides convenient pre-configured connection creation. */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class RequestFactory { /** User Agent string to be used in API calls. */ private final static String REQUEST_USER_AGENT = GameUp.USER_AGENT_TEMPLATE.replace(GameUp._WEBVIEW_USER_AGENT_, System.getProperty("http.agent")); /** Standard media type to use with all requests. */ private static final MediaType APPLICATION_JSON_MEDIA_TYPE = MediaType.parse("application/json"); /** * Prepare a HEAD request to the given path. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request head(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token) throws UnsupportedEncodingException, MalformedURLException { return create(uri, apiKey, token).head().build(); } /** * Prepare a GET request to the given path. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request get(final @NonNull Uri uri, final @NonNull String apiKey) throws UnsupportedEncodingException, MalformedURLException { return get(uri, apiKey, ""); } /** * Prepare a GET request to the given path. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request get(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token) throws UnsupportedEncodingException, MalformedURLException { return create(uri, apiKey, token).get().build(); } /** * Prepare a PUT request to the given path with the given data. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request put(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token, final @NonNull String body) throws UnsupportedEncodingException, MalformedURLException { return create(uri, apiKey, token) .put(RequestBody.create(APPLICATION_JSON_MEDIA_TYPE, body.getBytes("UTF-8"))).build(); } /** * Prepare a POST request to the given path with the given data. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request post(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token, final @NonNull String body) throws UnsupportedEncodingException, MalformedURLException { return create(uri, apiKey, token) .post(RequestBody.create(APPLICATION_JSON_MEDIA_TYPE, body.getBytes("UTF-8"))).build(); } /** * Prepare a DELETE request to the given path. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request ready to be sent via a OkHttpClient. * @throws UnsupportedEncodingException * @throws MalformedURLException */ public static Request delete(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token) throws UnsupportedEncodingException, MalformedURLException { return create(uri, apiKey, token).delete().build(); } /** * Return a builder configured with all common headers and options. * * @param uri The URL string to connect to. * @param apiKey The API key to use for authentication. * @param token The gamer token to use for authentication. * @return A Request.Builder with only the method (and optionally request * body) to be set before use. * @throws UnsupportedEncodingException * @throws MalformedURLException */ private static Request.Builder create(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token) throws UnsupportedEncodingException, MalformedURLException { return new Request.Builder().url(new URL(uri.toString())).header("User-Agent", REQUEST_USER_AGENT) .header("Content-Type", "application/json").header("Accept", "application/json") .header("Authorization", "Basic " + ByteString.of((apiKey + ":" + token).getBytes("ISO-8859-1")).base64()); } }