Я делаю приложение для Android, которое подключается к веб-сервису через REST API, и у меня есть дилемма с дизайном внутренней архитектуры.Лучший способ моделирования соединения Android REST
Теперь у меня есть класс Client.java которого purpouse это сделать соединение с сервером (ConnectionMethod является Enum, который содержит GET | значения POST):
public class Client {
private AsyncHttpClient client = new AsyncHttpClient(); //I use com.loopj.AsyncHttpClient to connect
private ConnectionMethod method;
private RequestParams params = new RequestParams();
private AsyncHttpResponseHandler responseHandler = new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
//Actions when connection success
}
@Override
public void onFailure(int statusCode, Header[] headers, JSONObject response, Throwable error) {
//Actions when connection fails
}
};
public Client (RequestParams params, ConnectionMethod method) {
this.params = params;
this.method = method;
}
public void addParameters (Map<String, String> parameters) {
for (Map.Entry<String, String> entry : parameters.entrySet()) {
this.params.put(entry.getKey(), entry.getValue());
}
}
public ServerResponse connect() {
RequestHandle handle;
if (this.method==ConnectionMethod.POST) {
handle = postRequest();
}
else {
handle = getRequest();
}
//How can I treat here different type of responses homogeneously?
}
private RequestHandle getRequest() {
return client.get(Constants.getEndpoint(), this.params, this.responseHandler);
}
private RequestHandle postRequest() {
return client.post(Constants.getEndpoint(), this.params, this.responseHandler);
}
}
метод выборки, который запрашивает информацию от сервера заключается в следующем:
public static void login (String login, String password) {
//This classes should be static or dynamic?
Map<String, String> map = new HashMap<String, String>();
map.put("login", login);
map.put("password", password);
map.put("method", "site_login");
Client c = new Client();
c.addParameters(map);
c.getRequest();
}
Все ответы сервера являются JSON: {статус: 0, результат: массив/INT/строка}, когда ответ является правильным и {статус: -1, сообщение: строка}, когда ответ неверен.
Дополнительная информация Я хочу сделать классы для моделирования компонентов из результата JSON (User.java, Message.java ...) и промежуточных методов между UI и API для реализации логики приложения и классов.
Каков наилучший способ создания однородной системы соединений, которая управляет автоматически правильным/отказоустойчивым ответом и не зависит от модели (пользователь, сообщение ...)?
Не беспокойтесь, используйте Retrofit http://square.github.io/retrofit/ –