I like use groundy for  the command service
public class LoginCommand extends GroundyTask{
private static final String ARG_PASSWORD = "arg_password";
private static final String ARG_USER = "arg_username";
@Override
protected TaskResult doInBackground() {
    String userName = getStringArg(ARG_USER);
    String password = getStringArg(ARG_PASSWORD);
    //do something 
    return succeeded();
}
public static void start(Context context, BaseLoginCommandCallback callback, String login, String password) {
    Groundy.create(LoginCommand.class)
            .arg(ARG_USER, login)
            .arg(ARG_PASSWORD, password)
            .callback(callback)
            .queueUsing(context);
}
public static abstract class BaseLoginCommandCallback{
    @OnSuccess(LoginCommand.class)
    public void handleSuccess(){
        onLoginSuccess();
    }
    @OnFailure(LoginCommand.class)
    public void handleFailure(){
        onLoginError();
    }
    protected abstract void onLoginSuccess();
    protected abstract void onLoginError();
}
 }    
or use  retrofit + gson ─ you can use groundy/AsyncTask/service  + retrofit or use asynchronous request retrofit
model:
public class SignRequest {
private String login;
private String password;
public SignRequest(String login, String password) {
    this.login = login;
    this.password = password;
}
public SignRequest() {
}
public String getLogin() {
    return login;
}
public void setLogin(String login) {
    this.login = login;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
      }
}      
public class SignResponse implements Parcelable {
private long id;
private String login;
private String message;
@SerializedName("auth_token")
private String authToken;
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getLogin() {
    return login;
}
public void setLogin(String login) {
    this.login = login;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}
public String getAuthToken() {
    return authToken;
}
public void setAuthToken(String authToken) {
    this.authToken = authToken;
}
public SignResponse() {
}
public SignResponse(Parcel in) {
    this.id = in.readLong();
    this.login = in.readString();
    this.message = in.readString();
    this.authToken = in.readString();
}
@Override
public int describeContents() {
    return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
    out.writeLong(id);
    out.writeString(login);
    out.writeString(message);
    out.writeString(authToken);
}
 }
API:
public interface Api {
public static final String URL = "http://xxxxxx/api/v1";
static final String AUTH_SIGNIN = "/auth/signin";
static final String AUTH_SIGNUP = "/auth/signup";
static final String QUERY_AUTH_TOKEN = "auth_token";
@POST(AUTH_SIGNIN)
void sign(@Body SignRequest request, Callback<SignResponse> callback);
@POST(AUTH_SIGNIN)
SignResponsesign(@Body SignRequest request);
@POST(AUTH_SIGNUP)
void signup(@Body SignUpRequest request, Callback<SignUpResponse> callback);
} 
ASYNCHRONOUS:   
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
    setContentView(R.layout.activity_auth);
  RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(Api.URL)
            .build();
    Api api = restAdapter.create(Api.class);
    SignRequest request= new SignRequest();
    request.setLogin(login);
    request.setPassword(password);
    api.sign(request, new Callback<SignResponse>() {
        @Override
        public void success(SignResponse signResponse, Response response) {
            Log.d("api", "login: " + signResponse.getLogin());
        .......
        }
        @Override
        public void failure(RetrofitError error) {
            .....
    });
}
SYNCHRONOUS(for exemple AsyncTask):
......
 @Override
protected Void doInBackground(SignRequest... params) {
   SignRequest request =  params[0];
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(Api.URL)
            .build();
    Api api = restAdapter.create(Api.class);
    SignResponse response = api.sign(request);
  return null;
}
.....