Frage

Ziel

Java-Client für Yahoos HotJobs Resumé Suche REST API .

Hintergrund

Ich bin zum Schreiben Web-Service-Clients für SOAP-APIs verwendet, wobei wsimport erzeugt Proxy-Stubs und du bist weg und läuft. Aber dies ist ein REST-API, die mir neu.

Details

Fortschritt

ich Frage sah Ruhe Kunden für Java? , aber die automatisierten Lösungen dort übernehmen Sie sowohl den Server und den Client bereitstellen, mit JAXB auf POJOs aufgerufen, ein Schema und ein REST-API zu erzeugen.

Mit Jersey (a JAX-RS Implementierung), ich habe eine manuelle HTTP-Anforderung zu machen in der Lage:

import com.sun.jersey.api.client.*;

...

ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);

WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");

// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);

// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own POJO mappings

Die Antwort kann wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?>   
<Response>   
    <ResponseCode>0</ResponseCode>   
    <ResponseMessage>Login successful</ResponseMessage>
    <Token>NTlEMTdFNjk3Qjg4NUJBNDA3MkJFOTI3NzJEMTdDNDU7bG9jYWxob3N0LmVnbGJwLmNvcnAueWFob28uY29tO0pVNWpzRGRhN3VhSS4yQVRqRi4wWE5jTWl0RHVVYzQyX3luYWd1TjIxaGx6U0lhTXN3LS07NjY2MzM1OzIzNDY3NTsxMjA5MDE2OTE5OzZCM1RBMVNudHdLbl9VdFFKMFEydWctLQ==</Token>   
</Response>  

Oder es kann wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?>   
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US">   
    <yahoo:description>description</yahoo:description>   
    <yahoo:detail>   
        <ErrorCode>errorCode</ErrorCode>   
    </yahoo:detail>   
</yahoo:error>  

Fragen

  • Gibt es eine Möglichkeit, um automatisch zu generieren POJOs die / entordnet ohne rangieren kann formales Schema?
  • Sollte ich versuchen, diese POJOs von Hand zu erzeugen, mit JAXB Anmerkungen?
  • Gibt es ein Tool, das ich so nutzen sollte ich muss alles nicht tun, um diese manuell?
War es hilfreich?

Lösung

Es ist interessant, dass sie eine HTTP-URL als Namespace-URI für das Schema zur Verfügung stellen, aber nicht wirklich ihr Schema dort speichern. Das könnte ein Versehen ihrerseits sein, die ein E-Mail oder Diskussionsliste Eintrag könnte korrigieren.

Ein Ansatz ist Ihr eigenes Schema zu erstellen, aber dies scheint wie eine Menge Arbeit für wenig Rückkehr. Bedenkt man, wie einfach die Nachrichten sind, frage ich mich, wenn Sie sogar ein POJO brauchen, um sie zu wickeln? Warum haben nicht nur einen Handler, der die Daten extrahiert Sie XPath verwenden müssen?


Edit: Explosion von der Vergangenheit, aber ich sah den Kommentar, nachzulesen auf die Frage, und erkannte, dass der erste Satz war schwer zu verstehen. So Klarstellung:

Eine sehr gute Gewohnheit, wenn Sie einen öffentlich zugänglichen Web-Service schreiben wollen, ist Ihr Schema-Dokument verfügbar unter derselben URL zu machen, die Sie für das Namespace-URI Schema verwenden - oder besser gesagt, hat die URL sein, Link Dokumentation zu vervollständigen (der W3C XSD-Namespace ist selbst ein gutes Beispiel: http://www.w3.org / 2001 / XMLSchema ).

Andere Tipps

Ich würde vorschlagen, Bohnen von Hand und nur mit Anmerkungen versehen mit JAXB Anmerkungen schreiben, wenn Sie zu haben. Für die meisten Accessoren / Mutatoren (Getter / Setter) Sie haben nicht zu; standardmäßig alle öffentlichen bean Zugriffs- und Felder in Betracht gezogen werden, wird Name Bean Konvention abgeleitet und Standard ist Elemente anstelle von Attributen zu verwenden (so Attribute kommentierten werden müssen).

Alternativ können Sie natürlich Schreib Schema von Hand, erzeugen Bohnen JAXB verwenden, wenn Sie wie W3C Schema viel. Und nur resultierenden Code verwenden, nicht-Schema für die Datenbindung.

In Bezug auf POJO: Das kann sehr einfach sein. So etwas wie:

@XmlRootElement("Response")
class Response {
  public int responseCode;
  public String responseMessage;
  public String token; // or perhaps byte[] works for automated base64?
}

und in ähnlicher Weise für andere. Oder verwenden Sie Getter / Setter wenn Sie sie mögen und nicht etwas mehr Ausführlichkeit kümmern. Dies sind nur Datencontainer, keine Notwendigkeit, sich zu extravagant.

Und wenn Sie müssen Art von Inhalt automatisch erkennen, betrachten Parser Stax, um zu sehen, was das Wurzelelement und dann JAXB Unmarshaller bindet mit und reichten XMLStreamReader, die zu diesem Wurzelelement verweisen. Auf diese Weise können Sie verschiedene Objekttypen übergeben zu binden.

Und schließlich: Senden / Empfangen von Anfragen: plain old HttpURLConnection für GET und POST-Requests funktioniert ok (Konstrukt unter Verwendung von, sagen wir, URL.openConnection ()). Jakarta Httpclient hat mehr Funktionen, wenn es sein muss. So oft brauchen Sie nicht wirklich ein separates REST-Client - sie nützlich sein kann, aber in der Regel baut auf einfachen HTTP-Client-Stücken

.

Ich finde HTTP4E sehr nützlich REST Anrufe zu machen. Es ist eine wunderbare Eclipse-Plugin, es hat Tabs, Syntaxfärbung, Auto vorschlägt, Code-Generierung, Replay REST HTTP-Aufruf, etc .. Es hat eine große Aufgabe des HTTP-Debugging, HTTP Fälschen, Hacken. Ich habe so viel Spaß mit ihm.

http://www.ywebb.com/

Versuchen JdkRequest von jcabi-http (Ich bin ein Entwickler). Dies ist, wie es funktioniert:

String body = new JdkRequest("http://www.google.com")
  .header("User-Agent", "it's me")
  .fetch()
  .body()

Überprüfen Sie dieses Blog-Post für weitere Informationen: http: // www.yegor256.com/2014/04/11/jcabi-http-intro.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top