/*
* Copyright (C) 2011 Artur Suilin
* 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 ru.metrika4j.http;
/**
* Интерфейс HTTP транспорта. Возможны реализации этого интерфейса, использующие разные HTTP библиотеки (HTTP
* клиент, встроенный в JDK, Apache HTTP клиент и т.п.).
* В транспорте нет функционала,, отвечающего за авторизацию: предполагается,
* что транспорту заранее передан OAuth-токен
* пользователя, от имени которого происходят обращения к API
*/
public interface HttpTransport {
/**
* Отправляет HTTP запрос по заданному адресу и возвращает ответ в виде строки. Предполагается,
* что все коммуникации происходят
* в кодировке UTF-8.<p>
* Транспорт должен выполнить следующие дополнительные действия при отправке запроса:
* <ul>
* <li>Выставить заголовку "Authorization" значение "OAuth [oAuthToken]", где [oAuthToken] - известный транспорту
* токен
* пользователя, от имени которого происходят обращения к API </li>
* <li>Выставить заголовку "Accept" значение "application/json"</li>
* <li>Если у запроса есть тело, выставить заголовку "Content-Type" значение "application/json"</li>
* </ul>
* <p>Если в ходе работы транспорта возникла ошибка, он должен бросить {@link ru.metrika4j.error
* .TransportException}.
* Если ошибка относится к авторизации - бросить {@link ru.metrika4j.error.AuthException}</p>
*
* @param url Адрес, по которому отправляется запрос
* @param method HTTP метод
* @param content Тело запроса (только для PUT и POST запросов). Может быть null.
* @return текстовый ответ от HTTP сервера
*/
String doRequest(String url, HttpMethod method, String content);
}