4

フロントエンドのバックエンドとして RESTFul サービスを使用しています。サービスは、その応答に expires/etag/lastmodified ヘッダーを設定します。

私が探しているのは、サービスからデータをフェッチし、ehcache のようなプラグ可能なキャッシュ バックエンドにキャッシュできるクライアント側 (できれば Java) ライブラリです。

私ができるようにしたいことは、エントリが無効になるとすぐに、バックグラウンド ワーカー スレッドを使用してキャッシュを自動的に準備することです。また、条件付き GET を行うのは賢明なはずです。

私はhttp://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.htmlに出くわしました

誰かが知っている他のライブラリはありますか?これはかなり一般的な問題ではありませんか?

4

3 に答える 3

10

Apache HttpComponents ライブラリの 4.0+ バージョンには、HTTP 1.1 キャッシュ サポートが付属しています。これは、次のように Spring RestTemplate レストフル クライアントで使用できます。

    CacheConfig cacheConfig = new CacheConfig();  
    cacheConfig.setMaxCacheEntries(1000);
    cacheConfig.setMaxObjectSize(8192);

    HttpClient cachingClient = new CachingHttpClient(new DefaultHttpClient(), cacheConfig);

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(cachingClient);
    RestTemplate rest = new RestTemplate(requestFactory);
于 2012-09-14T12:00:37.113 に答える
2

Java でのクライアント側の HTTP キャッシュの状況は特に良くありません。これは重要な問題であり、ほとんどの HTTP クライアント ライブラリ開発者によって攻撃されていません。

ゆっくりと変化していると思いますが、明確な指針を提供することはできません. 手始めに、Jersey などのクライアント側 API に付属する JAX-RS のさまざまな実装を調べることをお勧めします (これにはクライアント側キャッシュがありません)。RestletにRestfulieがあるかもしれませんので、確認してください。

Google経由で見つけたものは次のとおりです。

http://xircles.codehaus.org/projects/httpcache4j

独自のものを作成することもできますが、キャッシュ ヘッダー (Vary: を含む) を正しく理解するように注意する必要があります。

于 2011-10-01T08:01:26.623 に答える
1

RestEasyは、そのようなクライアントを使用している場合に起動して実行するのが簡単なクライアント側のキャッシュメカニズムを備えています。

RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
YourService proxy = ProxyFactory.create(YourService.class, url);

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);

最初にクライアントプロキシインスタンスを作成し、次にそれをキャッシュにラップします。それでおしまい。

于 2011-11-03T13:02:01.900 に答える