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 http-client et Apache’s httpclient? Dans quels domaines est-on meilleur que l’autre? Y a-t-il un bon tableau de comparaison quelque part? Lequel effectue mieux avec des fichiers plus volumineux (disons 2048 Mo)?
Merci beaucoup pour vos commentaires!
Ces deux choses ne devraient probablement pas être comparées directement. Jersey est un client REST, avec une implémentation complète de JAX-RS, une API soignée et une puissante stack de filtres. Apache Http Client est un client HTTP, parfait pour gérer les détails de bas niveau tels que les délais d’attente, les routes proxy complexes et l’interrogation de connexion. Ils agissent à différents niveaux de votre stack de protocoles. Lorsque vous utilisez Jersey, il existe toujours une sorte de backend client HTTP. En l’absence de backend explicitement, Jersey utilisera HttpUrlConnection
comme backend par défaut.
Jersey avec exemple de backend HttpUrlConnection:
Client client = Client.create(); WebResource webResource = client.resource("http://localhost:8080/path"); ClientResponse response = webResource.accept("application/json") .get(ClientResponse.class);
Exemple Jersey avec 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. Ceci est une abstraction d’intégration clé pour Jersey à intégrer et utiliser différents backends. Le premier exemple utilise URLConnectionClientHandler
profondément sous le capot.
En parlant de performance et de fonctionnalités, il est inutile de comparer Apache Http Client avec Jersey. On peut vouloir comparer différents backends de Jersey ici, puisque Jersey elle-même est simplement une API enveloppante. J’aimerais mettre en évidence certaines différences clés entre HttpUrlConnection et Apache Http Client en fonction de ma propre expérience:
HttpUrlConnection
HttpUrlConnection
basée sur HttpUrlConnection
est difficile à maintenir et à étendre. Apache Http Client
HttpUrlConnection
. La version 4.1 contient de nombreuses améliorations de performances et fonctionne bien mieux que son homologue HttpUrlConnection
également un pooling interne, mais vous ne disposez d’aucun outil pour personnaliser quoi ou quand mettre en pool, pas d’installations de contrôle pour vérifier l’état du pool. Gardez à l’esprit qu’il est également possible d’utiliser d’autres backends (par exemple pour des clients non bloquants) avec Jersey si vous avez une implémentation com.sun.jersey.api.client.ClientHandler
appropriée.