Welcher ist der beste HTTP-Client für Java?

Agenda

Ich habe beschlossen, HTTP-Kommunikation in Java zu schreiben, aber welche Client-Bibliothek soll ich verwenden? Ich war ratlos, weil es viele Kandidaten gab.

Voraussetzungen

Was ist

Was du benutzt hast, was du weißt

Suchen Sie nach etwas anderem

Listen Sie diejenigen auf, die in den Suchkandidaten "ok http vs" und "apache http client vs" bei Google erscheinen

Einige von ihnen enthalten nicht nur HttpClient, sondern auch verschiedene Funktionen wie JSON-Parsing. Wenn Sie danach suchen, scheint es mehr zu geben.

Umfrage

U's Wahl

U, ein Early Adopter-Kollege, hat OkHttp in seiner letzten App verwendet.

Artikel im Netz (Japanisch)

  1. http://qiita.com/Reyurnible/items/33049c293c70bd9924ee → 09.12.2016 Nachrüstempfehlung

  2. http://kikutaro777.hatenablog.com/entry/2015/07/19/044634 → 19.07.2015 Ich habe versucht, Unirest zu verwenden

  3. http://vividcode.hatenablog.com/entry/java/google-http-java-client → 08.11.2014 Ich habe versucht, google-http-java-client zu verwenden

  4. http://qiita.com/kou_hon/items/ddfb3fcb0277103e8b03 → Transfer von Volley zu OkHttp

Es ist kein Vergleichsartikel, daher ist es schwer zu beurteilen, aber jede Atmosphäre wird vermittelt. Laut 4 scheint die Verwendung von Volley unter Android schwierig zu sein.

Online-Artikel (Übersee)

  1. http://stackoverflow.com/questions/1322335/what-is-the-best-java-library-to-use-for-http-post-get-etc → 2009 Commons HttpClient Empfohlen. Es ist nur 7 Jahre alt, also ist es alt.

  2. https://www.quora.com/What-is-the-best-both-fast-and-reliable-HTTP-client-library-in-Java → 2014-2015 Unirest, Jersey, Netty, OkHttp usw. werden empfohlen. Es ist zu locker, um hilfreich zu sein.

Sortierrichtlinie

Grob abschneiden

Eindruck bisher

Die restlichen Bibliotheken.

Googeln mit vs.

google-http-java-client vs OkHttp → Informationen können nicht gefunden werden.

Unirest vs OkHttp → https://android.libhunt.com/project/unirest-java/vs/okhttp Der Name ist überwiegend OkHttp

OkHttp vs Jersey → Ich kann keine Informationen bekommen.

Vergleich der Benutzernummern

Aufgrund der großen Anzahl von Artikeln scheint OkHttp die meisten Benutzer zu haben. Jersey ist ein allgemeines Wort (Trikot), daher ist es ein Rätsel, das schwer zu googeln ist.

Codevergleich

Vergleichen Sie Code mit allgemeinen Funktionen. Ein Beispiel, das den Header und den Body sowie die POSTs festlegt.

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();

Es ist etwas schwer zu lesen, weil ich zu viele Objekte gemacht habe.

google-http-java-client

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

Es ist erfrischend in der Methodenkette, aber es scheint missverstanden zu werden, dass es am Ende get () ist, obwohl es POST ist.

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();

Dies ist auch eine Methodenkette. Es gibt nichts Besonderes zu tun.

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);

Fazit

Am sichersten ist OkHttp, das eine große Anzahl von Benutzern hat und eine De-facto-Standardposition festgelegt hat. Wenn Sie Ihre Augen vor Minderjährigen verschließen, scheint Unirest die bequemste und sauberste Implementierung in Bezug auf Code zu sein.

Etwas mehr

Für detailliertere Anforderungen müssen Leistung, Cookie-Verwaltung, Wiederholungsversuche, Multithreading usw. berücksichtigt werden.

Bonus

Java9 kann HttpClient in der Standardbibliothek bereitstellen oder nicht. https://thoughtfulsoftware.wordpress.com/2016/09/12/java-9-the-new-httpclient/ Aber es ist immer noch nicht für Android verfügbar.

Recommended Posts

Welcher ist der beste HTTP-Client für Java?
Was ist besser, Kotlin oder zukünftiges Java?
Java HTTP Client API-Zeitlimiteinstellung
Was ist java
Was ist Java <>?
Java mqtt Client
Was ist java
Festlegen des HTTP-Keep-Alive-Timeouts im Java-HTTP-Client
Die Frage, welche besser ist, ob oder wechseln
Was ist Java-Kapselung?
Was ist Java-Technologie?
Was ist Java API-Java?
[Java] Was ist flatMap?
[Java] Was ist ArrayList?
Dies ist in Ordnung. WebSocket: Server = Java, Client = Java, JavaScript
Java: Das Problem ist schneller, Stream oder Loop
Was ist besser, Verallgemeinerung oder Delegation, wenn es Überschneidungen gibt?
Was ist Java Assertion? Zusammenfassung.
Was ist eine Java-Sammlung?
[Windows] Java-Code ist verstümmelt
[Java] Was ist jaee j2ee?
[Java] Was ist Klassenvererbung?
[Java] Server Client Communication 1 (unvollendet)
[Java-Grundlagen] Was ist Klasse?
Was ist Java-Fluchtanalyse?
5. Tag von Java