Quel est le meilleur client HTTP pour Java?

ordre du jour

J'ai décidé d'écrire la communication HTTP en Java, mais quelle bibliothèque client dois-je utiliser? J'étais perdu car il y avait beaucoup de candidats.

Conditions préalables

Quel est

Ce que vous avez utilisé, ce que vous savez

Cherchez autre chose

Répertoriez ceux qui apparaissent dans les candidats de recherche "ok http vs" et "apache http client vs" sur Google

Certains d'entre eux incluent non seulement HttpClient, mais également diverses fonctions telles que l'analyse JSON. Si vous le cherchez, il semble y en avoir plus.

sondage

Le choix de U

U, un de ses premiers collègues, a utilisé OkHttp dans sa récente application.

Articles sur le net (japonais)

  1. http://qiita.com/Reyurnible/items/33049c293c70bd9924ee → 2016-12-09 Recommandation de rénovation

  2. http://kikutaro777.hatenablog.com/entry/2015/07/19/044634 → 19/07/2015 J'ai essayé d'utiliser Unirest

  3. http://vividcode.hatenablog.com/entry/java/google-http-java-client → 08/11/2014 j'ai essayé d'utiliser google-http-java-client

  4. http://qiita.com/kou_hon/items/ddfb3fcb0277103e8b03 → Transfert de Volley à OkHttp

Ce n'est pas un article comparatif, donc c'est difficile à juger, mais chaque atmosphère est véhiculée. Selon 4, utiliser Volley sur Android semble être difficile.

Articles en ligne (outre-mer)

  1. http://stackoverflow.com/questions/1322335/what-is-the-best-java-library-to-use-for-http-post-get-etc → 2009 Commons HttpClient recommandé. Il n'a que 7 ans, donc c'est vieux.

  2. https://www.quora.com/What-is-the-best-both-fast-and-reliable-HTTP-client-library-in-Java → 2014-2015 Unirest, Jersey, Netty, OkHttp, etc. sont recommandés. C'est trop lâche pour être utile.

Politique de tri

Tronquer grossièrement

Impression jusqu'à présent

Les bibliothèques restantes.

Googler avec vs

google-http-java-client vs OkHttp → Les informations sont introuvables.

Unirest vs OkHttp → https://android.libhunt.com/project/unirest-java/vs/okhttp Le nom est majoritairement OkHttp

OkHttp vs Jersey → Je ne peux pas obtenir d'informations.

Comparaison des numéros d'utilisateurs

En raison du grand nombre d'articles, il semble qu'OkHttp compte le plus d'utilisateurs. Jersey est un mot général (jersey), c'est donc un mystère difficile à rechercher sur Google.

Comparaison de code

Comparez le code avec les fonctionnalités communes. Un exemple qui définit l'en-tête, le corps et les POST.

OkHttp

OkHttpClient client = new OkHttpClient();
MediaType MIMEType= MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create (MIMEType,"{}");
Request request = new Request.Builder().url(url).post(requestBody).build();
Response response = client.newCall(request).execute();

C'est un peu difficile à lire car j'ai fait trop d'objets.

google-http-java-client

Response response =
    client
    .preparePost("http://localhost:8080/post")
    .setBody(builder.toString())
    .execute()
    .get();

C'est rafraîchissant dans la chaîne de méthodes, mais il semble être mal compris que c'est get () à la fin même si c'est POST.

Unirest

HttpResponse<JsonNode> jsonResponse = Unirest.post("http://localhost:8080/post")
  .header("Content-Type", "application/json")
  .queryString("apiKey", "123")
  .field("param1",  "nitori")
  .field("param2", "1234")
  .asJson();

C'est aussi une chaîne de méthodes. Il n'y a rien de spécial à faire.

Jersey

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/post").path("resource");
 
Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");
 
MyJAXBBean bean =
target.request(MediaType.APPLICATION_JSON_TYPE)
    .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
        MyJAXBBean.class);

Conclusion

OkHttp, qui compte un grand nombre d'utilisateurs et a établi une position standard de facto, est le plus sûr. Si vous fermez les yeux sur le fait d'être mineur, Unirest semble être l'implémentation la plus pratique et la plus propre en termes de code.

Quelque chose de plus

Pour des exigences plus approfondies, les performances, la gestion des cookies, les tentatives, le multithreading, etc. doivent être pris en compte.

prime

Java9 peut ou non fournir HttpClient dans la bibliothèque standard. https://thoughtfulsoftware.wordpress.com/2016/09/12/java-9-the-new-httpclient/ Mais ce n'est toujours pas disponible sur Android.

Recommended Posts

Quel est le meilleur client HTTP pour Java?
Quel est le meilleur, Kotlin ou futur Java?
Paramètre de délai d'expiration de l'API du client HTTP Java
Qu'est-ce que 'java
Qu'est-ce que Java <>?
Client Java mqtt
Qu'est-ce que 'java
Définir le délai d'attente HTTP Keep Alive dans le client HTTP Java
La question de savoir quel est le meilleur, si ou changer
Qu'est-ce que l'encapsulation Java?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
[Java] Qu'est-ce que flatMap?
[Java] Qu'est-ce que ArrayList?
C'est OK WebSocket: Serveur = Java, Client = Java, JavaScript
Java: dont le problème est plus rapide, en flux ou en boucle
Qu'est-ce qui est mieux, généralisation ou délégation, quand il y a des chevauchements?
Qu'est-ce que l'assertion Java? Résumé.
Qu'est-ce qu'une collection Java?
[Windows] Le code Java est déformé
[Java] Qu'est-ce que jaee j2ee?
[Java] Qu'est-ce que l'héritage de classe?
[Java] Server Client Communication 1 (inachevée)
[Notions de base Java] Qu'est-ce que la classe?
Qu'est-ce que l'analyse Java Escape?
5ème jour de Java