2010-12-06 13 views
29

私のサーバーアプリケーションは、JAX-RS(Jersey Implementation)を使用してRESTful Webサービスを公開しています。 (Apache HttpClientを使用する以外の)このサービスを呼び出す最良の方法は何ですか? Jersey、Restlet、RESTeasy、その他のフレームワークのRESTクライアントAPIがAndroid上で動作するかどうかは疑問でした。Android用Java RESTクライアントAPI

おかげで、 テオ

+1

Android用のRESTletエディションがあります。あなたのサーバーコードがこれまでのJerseyをベースにしていれば、再利用可能なコードはほとんどありません。 –

+0

グーグルでは、アンドロイド用のRESTクライアントやチュートリアルを自分で作成しているようです。 –

+4

@Martijn Verburgご意見ありがとうございます。しかし、グーグルリングは私の質問に対する答えではありません。もちろん、java.net.URLまたはApache HttpClientを使用して自分自身を構築することもできますが、最も便利な方法を探していました。例えば。Androidで、私はいくつかの理由でjava.net.URLよりもApache HttpClientを好んでいます。また、JAX-RS Webサービスを使用している場合は、JAX-RSを意識したクライアントを使用して、定型コードを作成してより優れた抽象概念を提供することをお勧めします。 – Theo

答えて

0

は、最も単純なケースでは、あなただけの要求を行うためのjava.net.URLとそのOpenConnectionメソッド()メソッドを使用することができます。そして、データ・バインディング・ライブラリー(XML用のJAXB、JSON用のJackson)が応答を処理します(POST xmlまたはjsonの場合はおそらく要求します)。

+1

あなたの答えに感謝します。私はより高いレベルの抽象化を提供するソリューションを探していました。 RESTeasy Client Proxy Frameworkのように、既存のJAX-RS Javaインターフェイスを再利用してクライアントプロキシを作成することができます。しかし、これらの「JAX-RS対応」クライアントAPIがAndroidでも動作するかどうかはわかりません。 – Theo

+0

わかりました、時にはいいです。しかし、利便性の大部分はデータバインディングが容易であるためです。とにかく、私は確かに分かっていればいいと思うが、ジャージーのクライアントをチェックする価値があるかもしれない。 – StaxMan

5

URLConnectionを処理するよりも少し快適にしたい場合は、Resty for Javaをチェックしてください。 シンプルで軽量ですが、まだかなり新しいです。

http://beders.github.com/Resty

+3

私はこの実行を取得していません。それは、APIレベル9(2.3)からいくつかのクラスを必要とするので、悪いオプションです。 – u2ix

+0

APIレベル9?正しい答えにコメントしたことはありますか?私がどのように助けることができるか教えてください –

+0

Resty.javaはレベル9からAndroidにある 'java.net.CookieManager'をインポートします。[APIリファレンス](http://developer.android.com/reference/java/net/CookieManager。 html)。だからクラスをロードできませんでした。 – u2ix

3

は、他の日にこの1に走ったと思ったまだ試していませんが、Android上で動作するようです: http://crest.codegist.org

9

Resteasy-mobileは完璧なソリューションです。

それは基本的に(クライアントフレームワークを持っている)本格RESTEasyのだが、むしろHttpURLConnectionのよりはApache HTTPクライアントを使用しています(アンドロイド上に存在しない)

ここでの使用の詳細については、(HTTPです://docs.jboss .ORG/RESTEasyの/ドキュメント/ 2.3.1.GA //ユーザガイドの/ html_single/index.htmlを#RESTEasy_Client_Framework)ここ

は達人

<dependency> 
     <groupId>org.jboss.resteasy.mobile</groupId> 
     <artifactId>resteasy-mobile</artifactId> 
     <version>1.0.0</version> 
    </dependency> 

アンドロイド側にはほとんどのサンプルコード

するためのものです210
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"); 
    } 
} 

JAX-RSサービス定義(PushSVC.java)の両方Androidとサーバ側

@Path("/mobile") 
public interface PushSVC { 
    /* 
    Sample 
    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); 

} 

モデルMessageVO定義

public class MessageVO { 
    String collapseKey; 
    HashMap<String, String> contentList; 

    public MessageVO() { 
    } 

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

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

    public String getCollapseKey() { 
     return collapseKey; 
    } 

    public HashMap<String, String> getContentList() { 
     return contentList; 
    } 
} 

これはアンドロイド

public class Broadcast extends AsyncTask<Context,Void,Void> 
{ 

    @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; 
    } 
} 
上のメソッド呼び出しであります

これはかなりシンプルで、書かれたコードはすべて再利用可能です。boi lerplateコードが存在しないことに近いです

皆さん、こんにちは。

+3

HttpURLConnectionは、バージョン1よりAndroidでご利用いただけます。2.2より前のバージョンでは、実装がバグのために使用が推奨されませんでしたが、Androidでは "本当です。 – aaronmarino

+0

これは、Java Rest Back Endのための最良の解決策です。うまくいけば、簡単にサーバー側を実装することができます。 –

関連する問題