27 votes

API client REST Java pour Android

Mon application serveur expose un service web RESTful en utilisant JAX-RS (Implémentation Jersey). Quel est le meilleur moyen d'invoker ce service (autre que d'utiliser Apache HttpClient)? Je me demandais si les API clients REST de Jersey, Restlet, RESTeasy et d'autres frameworks fonctionnent sur Android.

Merci, Theo

7voto

Le Duc Duy Points 623

Resteasy-mobile est une solution parfaite.

C'est essentiellement une version complète de resteasy (qui possède un framework client) mais qui utilise Apache HTTP Client plutôt que HttpURLConnection (qui n'existe pas sur Android)

Voici plus d'informations sur son utilisation (http://docs.jboss.org/resteasy/docs/2.3.1.GA//userguide/html\_single/index.html#RESTEasy\_Client\_Framework)

Voici pour le maven

        org.jboss.resteasy.mobile
        resteasy-mobile
        1.0.0

Un petit code d'exemple du côté android

    public class RestServices {
    static RegisterSVC registerSVC;
    static PushSVC pushSVC;
    static TrackerSVC trackerSVC;

    RestServices() {
        RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
    }

    public static RegisterSVC getRegisterSVC() {
        return ProxyFactory.create(RegisterSVC.class,"http://143.248.194.236:8080/notification");

    }

    public static PushSVC getPushSVC() {
        return ProxyFactory.create(PushSVC.class,"http://143.248.194.236:8080/notification");
    }

    public static TrackerSVC getTrackerSVC() {
        return ProxyFactory.create(TrackerSVC.class,"http://143.248.194.236:8080/notification");
    }
}

Définition du service JAX-RS (PushSVC.java) du côté android et du serveur

@Path("/mobile")
public interface PushSVC {
    /*
    Exemple
    curl --data '{"collapseKey":"asdf","contentList":{"aaaa":"you","ssss":"you2"}}' -X POST -H 'Content-type:application/json' -v http://localhost:8080/notification/mobile/11111/send
     */
    @POST
    @Path("/{uuid}/send")
    @Consumes(MediaType.APPLICATION_JSON)
    String sendPush( MessageVO message, @PathParam("uuid") String uuid);

}

Définition du modèle MessageVO

public class MessageVO {
    String collapseKey;
    HashMap contentList;

    public MessageVO() {
    }

    public MessageVO(String collapseKey) {
        this.collapseKey = collapseKey;
        contentList = new HashMap();
    }

    public void put(String key, String value)
    {
        this.contentList.put(key,value);
    }

    public String getCollapseKey() {
        return collapseKey;
    }

    public HashMap getContentList() {
        return contentList;
    }
}

Ceci est l'invocation de méthode sur android

public class Broadcast extends AsyncTask
{

    @Override
    protected Void doInBackground(Context... contexts) {
        MessageVO message = new MessageVO("0");
        message.put("tickerText","Ticker ne` :D");
        message.put("contentTitle","Title ne` :D");
        message.put("contentText","Content ne` :D");
        RestServices.getPushSVC().sendPush(message,TrackInstallation.id(contexts[0]).toString());
        return null;
    }
}

C'est assez simple et tout le code écrit est réutilisable, le code répétitif est presque inexistant

J'espère que cela aidera tout le monde.

5voto

Si vous souhaitez un peu plus de confort que de devoir gérer URLConnection, jetez un coup d'œil à Resty pour Java. Simple, léger, mais encore assez nouveau.

http://beders.github.com/Resty

3voto

zhk Points 81

Je suis tombé sur celui-ci l'autre jour, je ne l'ai pas encore essayé, mais il semble fonctionner sur Android : http://crest.codegist.org

2voto

Mike Points 21

Voici un bon exemple qui contient des codes sources de tout, y compris des EJB, RestEasy et Android:

http://code.google.com/p/android-jbridge/

0voto

StaxMan Points 34626

Pour les cas les plus simples, vous pouvez simplement utiliser java.net.URL et sa méthode openConnection() pour faire une requête. Ensuite, utilisez des bibliothèques de liaison de données (JAXB pour XML, Jackson pour JSON) pour gérer la réponse (et éventuellement la requête si vous POSTez du xml ou du json).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X