Tout d'abord, je n'essaie pas de déclencher une guerre des flammes ici. Je connais assez bien Jersey, mais j'ai à peine utilisé httpclient.
Quelles sont les principales différences entre jersey-client et httpclient d'Apache? Dans quels domaines l'un est-il meilleur que l'autre? Y a-t-il un bon tableau de comparaison quelque part? Lequel fonctionne mieux avec des fichiers plus volumineux (disons 2048 Mo)?
Un grand merci pour vos commentaires!
Ces deux choses ne devraient probablement pas être comparées directement. Jersey est un client REST, avec une implémentation JAX-RS complète, une API fluide et une pile de filtres puissante. Apache Http Client est un client HTTP, parfait pour gérer les détails de bas niveau comme les délais d'attente, les routes proxy complexes et l'interrogation de connexion. Ils agissent à différents niveaux de votre pile de protocoles. Lorsque vous utilisez Jersey, il y a toujours une sorte de backend client HTTP impliqué. En l'absence de backend explicite, Jersey utilisera HttpUrlConnection
comme backend par défaut.
Exemple de backend Jersey avec HttpUrlConnection:
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);
Exemple de backend avec Jersey Apache Http Client:
HttpClient apacheClient = HttpClientBuilder.create().build();
Client client = new Client(new ApacheHttpClient4Handler(apacheClient,
new BasicCookieStore(),
true));
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);
Veuillez noter l'utilisation de Handler dans le dernier exemple. Il s'agit d'une abstraction d'intégration clé pour Jersey afin d'incorporer et d'utiliser divers backends. Le premier exemple utilise URLConnectionClientHandler
profondément sous le capot.
En parlant de performances et de fonctionnalités, il est peu logique de comparer Apache Http Client avec Jersey. On peut vouloir comparer différents backends de Jersey ici, car Jersey lui-même n'est qu'une API d'encapsulation. Je voudrais souligner certaines différences clés entre HttpUrlConnection et Apache Http Client en fonction de ma propre expérience:
HttpUrlConnection
HttpUrlConnection
est difficile à maintenir et à étendre.Client Apache Http
HttpUrlConnection
. La version 4.1 contient de nombreuses améliorations de performances et fonctionne bien mieux que son homologueHttpUrlConnection
dispose également d'un pool interne, mais vous n'avez aucun outil pour personnaliser quoi ou quand mettre en pool, pas de fonctions de surveillance pour vérifier l'état du pool.Gardez à l'esprit qu'il est également possible d'utiliser d'autres backends (par exemple pour les clients non bloquants) avec Jersey si vous disposez d'un com.Sun.jersey.api.client.ClientHandler
la mise en oeuvre.