2017-02-13 6 views
16

Ich habe viele Artikel gelesen, um den besten Rest Client für Java-Anwendung zu finden, fand ich schließlich mit Jersey mit Apache HTTP-Client 4.5 ist großartig, aber in einer Menge von Artikeln, die ich jetzt gefunden Retrofit ist die beste (ich habe nicht erwähnt Volley, weil in meinem Fall brauche ich nicht, dass die API Caching unterstützt.Jersey REST-Client mit Apache HTTP Client 4.5 vs Retrofit

Ist Retrofit besser für eine Java-Client-Anwendung. Oder ist es nur besser für Android? Und Warum habe ich diesen Vergleich nicht gefunden .. sie können nicht verglichen werden?

Kann ich einen Vergleich zwischen ihrer Leistung, Verbindungspooling, auf welcher Schicht sie arbeiten, Kompression der Anfragen und Antworten, Timeout, Deserialisierung?

HTTP3 unterstützt nicht Verbindungspooling, ist das warum Retrofit für Android verwendet wird? Daher ist es für eine normale Java-Anwendung, bei der ein Verbindungsleck auftritt, nicht praktikabel.

Mein Ziel ist es, den besten Rest API Client mit einer hohen Leistung zu finden und eine hohe Anzahl von Verbindungen zu unterstützen.

Vielen Dank im Voraus

+0

Opinion-basierten Fragen sind nicht eine gute Passform für Stackoverflow verwenden kann. Was das "beste" Werkzeug ist, hängt von Ihrer Situation und Ihrem persönlichen Geschmack ab. Außerdem sieht es so aus, als würdest du einfach nicht die harte Arbeit tun, die Werkzeuge zu vergleichen, an denen du selbst so interessiert bist, sondern nur die Arbeit anderer zu ernten, die es für dich tun. Bei allem Respekt, aber ich mag solche Fragen überhaupt nicht. Wenn Sie mit einem der zu lösenden Tools kein konkretes Problem darstellen können, sollten Sie die Frage löschen. – kriegaex

+0

@kriegaex Vielen Dank für Ihre Meinung .. aber ich muss die beste Wahl treffen, weil ich eine neue API schreiben muss, die eine hohe Anzahl von Verbindungen mit der besten Leistung unterstützt, und ich möchte sicher sein, wenn Retrofit2 einen hohen unterstützt Anzahl der Anfragen mit einer guten Leistung –

+0

Dann schreiben Sie nicht einfach "am besten", sondern "höchsten Durchsatz" anstatt eine Menge von teilweise widersprüchlichen Kriterien aufzulisten - vielleicht ist das beste Werkzeug für die Deserialisierung zum Beispiel schlechter im Durchsatz. Und stellen Sie einen Beispielcode zur Verfügung, der Ihrer Meinung nach zu langsam oder zumindest für Ihre Situation typisch ist, um anderen dabei zu helfen, diese für Sie zu optimieren. Sie wissen nicht, worum es in StackOverflow geht? Haben Sie sich jemals gewundert, warum niemand die Frage beantworten wollte, bevor Sie ein Kopfgeld darauf gelegt haben?Denn niemand außer Ihnen kann die Frage mit unklaren Kriterien wirklich beantworten - und genau das ist am Ende passiert. – kriegaex

Antwort

20

Sie sind zusammen verschiedene Dinge zu mischen. Um die Dinge im Voraus zu klären:

Retrofit ist eine Client-Bibliothek für die Interaktion mit REST-APIs. Als solches bietet es das gleiche Abstraktionsniveau wie , RESTeasy oder Spring's RestTemplate. Sie alle ermöglichen die Interaktion mit REST-APIs unter Verwendung einer typsicheren API, ohne sich mit Low-Level-Aspekten wie Serialisierung, Erstellung von Anfragen und Verarbeitung von Antworten befassen zu müssen.

Jede dieser Bibliotheken verwendet einen HTTP-Client darunter, um tatsächlich mit einem HTTP-Server zu kommunizieren. Beispiele sind Apache HTTP client, die Sie erwähnt haben, OkHttp oder die Plain-Old HttpUrlConnection Versand mit dem JDK.

Sie können die verschiedenen REST-Clientbibliotheken und HTTP-Clients normalerweise mischen und abgleichen, mit Ausnahme von Retrofit because Retrofit has a hard dependency on OkHttp since version 2 (mit Retrofit 1.x können Sie Apache HTTP Client, HttpUrlConnection oder OkHttp verwenden).

Zurück zur eigentlichen Frage: Was wann zu wählen.

Android: Es ist einfach hier, weil JAX-RS, die API/Technologie hinter Jersey und RESTeasy nicht auf Android unterstützt wird. Daher ist Retrofit mehr oder weniger die einzige Option außer vielleicht Volley, wenn Sie nicht direkt mit HTTP kommunizieren wollen. Frühling ist auch nicht verfügbar und Spring Android is abandoned.

JRE/JDK: Hier haben Sie die volle Auswahl an Optionen.

  • Das Nachrüsten ist möglicherweise hilfreich, wenn Sie eine schnelle und einfache Lösung zum Implementieren einer API eines Drittanbieters verwenden möchten, für die kein SDK oder keine JAX-RS-Schnittstellen verfügbar sind.
  • Spring's RestTemplate ist eine gute Wahl, wenn Sie Spring verwenden und es gibt keine JAX-RS-Schnittstellen oder Sie möchten nicht in JAX-RS kaufen, d. H. Auch auf der Serverseite.
  • JAX-RS (Jersey, RESTeasy, ...) ist eine gute Wahl, wenn Sie Schnittstellendefinitionen zwischen Client und Servern teilen möchten oder wenn Sie ohnehin auf JavaEE all-in sind.
  • In Bezug auf die Leistung: Die wichtigsten Treiber hier ist die Zeit für HTTP und (De) Serialisierung. Da die (De-) Serialisierung von spezialisierten Bibliotheken wie Jackson oder Protobuf durchgeführt wird und alle dasselbe verwenden (oder Sie zumindest dazu bringen könnten), sollte es keinen bedeutungsvollen Unterschied geben.

    +0

    Wenn ich eine große Anzahl von Anfragen gleichzeitig habe, ist Retrofit2 eine gute Wahl, unterstützt es den Stresstest, haben Sie Referenzen zu Benchmarks? –

    +0

    Retrofit ist eine dünne Schicht auf OkHttp. OkHttp direkt zu betrachten könnte daher relevanter sein. Benchmarks der Autoren: https://github.com/square/okhttp/tree/master/benchmarks. In Bezug auf Stresstests: Was haben Sie vor? – aha

    +0

    Vielen Dank für Ihre Zeit, alles zu erklären. Was ich in meinem Kopf habe ist, dass ich Retrofit2 basierend auf okhttp3 verwenden wollte, aber ich hatte Angst, wenn sie nicht gleichzeitig eine große Anzahl von Anfragen unterstützen. –

    3

    Es dauerte eine Weile zu finden, aber ich habe die perfekte REST-Client-Bibliothek gefunden, die unsere Entwicklung deklarativ und einfach macht. Wir können dies als Standard bei der Entwicklung neuer REST-Implementierungen oder APIs verwenden.

    Es heißt Feign, das vom Netflix-Team entwickelt wurde und mit Spring Cloud Netflix arbeiten soll. Weitere Details here auf der Projektseite.

    Einige Features sind: - Integration mit Jackson, Gson und anderem Encoder/Decoder - Einsatz für die Netzwerkkommunikation OkHttp, eine bewährte HTTP-Bibliothek - Bindung mit SLF4J für Protokollierungsfunktionen - Schnittstellen-basierte Implementierung, minimale Entwicklung. Unten ist ein Beispiel-Client:

    @FeignClient("stores") 
    public interface StoreClient 
    { 
        @RequestMapping(method = RequestMethod.GET, value = "/stores") 
        List<Store> getStores(); 
    
        @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json") 
        Store update(@PathVariable("storeId") Long storeId, Store store); 
    } 
    

    Und nach @aha ‚s Antwort, wie unten zitiert:

    JRE/JDK: Hier haben Sie die volle Auswahl an Optionen.

    Nachrüstung ist vielleicht schön, wenn Sie eine schnelle und einfache Lösung für eine API von Drittanbietern implementieren möchten, für die kein SDK verfügbar ist oder JAX-RS Schnittstellen.

    Spring RestTemplate ist eine gute Wahl, wenn Sie Frühling verwenden und es gibt keine JAX-RS-Schnittstellen oder wollen Sie nicht in JAX-RS kaufen, das heißt es auch auf der Server-Seite verwenden.

    JAX-RS (Jersey, Resteasy, ...) ist eine gute Wahl, wenn Sie Schnittstelle wollen Definitionen zwischen Client und Server teilen oder wenn Sie all-in auf JavaEE sowieso.

    Feign funktioniert wie Retrofit und JAX-RS zusammen: einfache Lösung und kann Schnittstellendefinitionen zwischen Client und Server gemeinsam nutzen und JAX-RS-Schnittstellen

    Verwandte Themen