Mit JSR 311 und seinen Implementierungen haben wir einen leistungsstarken Standard für die Bereitstellung von Java-Objekten über REST. Auf der Clientseite scheint jedoch etwas zu fehlen, das mit Apache Axis for SOAP vergleichbar ist - etwas, das den Webdienst verbirgt und die Daten transparent auf Java-Objekte zurückführt.
Wie erstellen Sie Java RESTful-Clients? Verwenden Sie HTTPConnection und manuelles Parsen des Ergebnisses? Oder spezialisierte Kunden für zB Jersey oder Apache CXR?
Antworten:
Dies ist eine alte Frage (2008), daher gibt es heute viel mehr Optionen als damals:
UPDATES (Projekte, die 2020 noch aktiv sind):
von SonatypealsAsync-http-Client bekannt.Eine Einschränkung bei der Auswahl von HTTP / REST-Clients. Stellen Sie sicher, dass Sie überprüfen, was Ihr Framework-Stack für einen HTTP-Client verwendet, wie er Threading ausführt, und im Idealfall denselben Client verwenden, wenn er einen anbietet. Wenn Sie also etwas wie Vert.x oder Play verwenden, möchten Sie möglicherweise versuchen, den Backing-Client zu verwenden, um an der vom Framework bereitgestellten Bus- oder Reaktorschleife teilzunehmen. Andernfalls sollten Sie auf möglicherweise interessante Threading-Probleme vorbereitet sein.
quelle
Wie ich in diesem Thread erwähnt habe, verwende ich eher Jersey, das JAX-RS implementiert und mit einem netten REST-Client geliefert wird. Das Schöne ist, wenn Sie Ihre RESTful-Ressourcen mit JAX-RS implementieren, kann der Jersey-Client die Entitätsanbieter wie JAXB / XML / JSON / Atom usw. wiederverwenden, sodass Sie auf der Serverseite dieselben Objekte wie Sie wiederverwenden können Verwendung auf dem clientseitigen Unit-Test.
Zum Beispiel ist hier ein Einheit Testfall aus dem Projekt Apache Camel , die XML - Nutzlasten von einer RESTful Ressource sucht (das JAXB Objekt Endpoints verwenden). Die Ressourcenmethode (uri) ist in dieser Basisklasse definiert, die nur die Jersey-Client-API verwendet.
z.B
Übrigens hoffe ich, dass die zukünftige Version von JAX-RS eine nette clientseitige API nach dem Vorbild von Jersey hinzufügt
quelle
Sie können die Standard-Java SE-APIs verwenden:
Sie können auch die REST-Client-APIs verwenden, die von JAX-RS-Implementierungen wie Jersey bereitgestellt werden. Diese APIs sind einfacher zu verwenden, erfordern jedoch zusätzliche Jars in Ihrem Klassenpfad.
Weitere Informationen finden Sie unter:
quelle
Wenn Sie nur einen REST-Service aufrufen und die Antwort analysieren möchten, können Sie Rest Assured ausprobieren
quelle
Sie können auch Restlet überprüfen, das über alle clientseitigen Funktionen verfügt und stärker auf REST ausgerichtet ist als Bibliotheken auf niedrigerer Ebene wie HttpURLConnection oder Apache HTTP Client (die wir als Konnektoren nutzen können).
Viele Grüße, Jerome Louvel
quelle
Sie könnten Rapa versuchen . Teilen Sie uns Ihr Feedback dazu mit. Sie können auch Probleme oder erwartete Funktionen protokollieren.
quelle
Ich möchte auf zwei weitere Optionen hinweisen:
quelle
Versuchen Sie es
JdkRequest
von jcabi-http (ich bin ein Entwickler). So funktioniert es:Weitere Informationen finden Sie in diesem Blogbeitrag: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
quelle
Ich habe kürzlich Retrofit Library von square ausprobiert. Es ist großartig und Sie können Ihre Rest-API sehr einfach aufrufen. Die auf Anmerkungen basierende Konfiguration ermöglicht es uns, viele Kesselplattencodierungen loszuwerden.
quelle
Ich benutze Apache HTTPClient, um die gesamte HTTP-Seite der Dinge zu handhaben.
Ich schreibe XML-SAX-Parser für den XML-Inhalt, der das XML in Ihr Objektmodell analysiert. Ich glaube, dass Axis2 auch XML -> Modellmethoden verfügbar macht (Achse 1 hat diesen Teil ärgerlich versteckt). XML-Generatoren sind trivial einfach.
Das Codieren dauert nicht lange und ist meiner Meinung nach recht effizient.
quelle
OkHttp ist leicht und leistungsstark, wenn es auch mit Retrofit kombiniert wird. Dies funktioniert sowohl für die allgemeine Java-Verwendung als auch für Android.
OkHttp : http://square.github.io/okhttp/
Nachrüstung : http://square.github.io/retrofit/
quelle
Da niemand erwähnt hat, ist hier noch einer: Feign , der von Spring Cloud verwendet wird .
quelle
Obwohl es einfach ist, einen HTTP-Client zu erstellen und eine Anfrage zu stellen. Wenn Sie jedoch einige automatisch generierte Clients verwenden möchten, können Sie WADL verwenden, um Code zu beschreiben und zu generieren.
Sie können RestDescribe verwenden , um WSDL zu generieren und zu kompilieren. Sie können damit Clients in PHP, Ruby, Python, Java und C # generieren. Es generiert sauberen Code und es gibt eine gute Änderung, die Sie nach der Codegenerierung etwas anpassen müssen. Eine gute Dokumentation und die zugrunde liegenden Gedanken hinter dem Tool finden Sie hier .
Es gibt nur wenige interessante und nützliche WADL-Tools, die auf Wintermute erwähnt werden.
quelle
Ich habe eine Bibliothek geschrieben, die eine Java-Schnittstelle einem Remote-JSON-REST-Service zuordnet:
https://github.com/ggeorgovassilis/spring-rest-invoker
quelle
Schauen Sie sich den http-rest-client an
https://github.com/g00dnatur3/http-rest-client
Hier ist ein einfaches Beispiel:
Die Bibliothek kümmert sich für Sie um die Serialisierung und Bindung von JSON.
Hier ist ein weiteres Beispiel:
Und ein letztes Beispiel:
Prost!
quelle
Beispiele für Jersey Rest Client:
Hinzufügen von Abhängigkeit:
ForGetMethod und Übergabe von zwei Parametern:
GetMethod übergibt einen Parameter und erhält eine Antwort von List:
Oben gibt es eine Liste zurück, die wir als Liste akzeptieren und dann in Json Array und dann in Json Array in Liste konvertieren.
Wenn Post Request Json Object als Parameter übergibt:
quelle
Ich habe RestAssured die meiste Zeit verwendet, um die Antwort des Restdienstes zu analysieren und die Dienste zu testen. Abgesehen von Rest Assured habe ich auch die folgenden Bibliotheken verwendet, um mit Resful-Diensten zu kommunizieren.
ein. Jersey Rest Client
b. Spring RestTemplate
c. Apache HTTP Client
quelle
Ich verwende derzeit https://github.com/kevinsawicki/http-request. Ich mag ihre Einfachheit und die Art und Weise, wie Beispiele gezeigt werden, aber meistens wurde ich verkauft, als ich las:
Dies löste einige Probleme bei einem Java 1.6-Projekt. Was das Dekodieren von Json in Objekte betrifft, ist Gson einfach unbesiegbar :)
quelle