En guide til unirest

1. Oversikt

Unirest er et lett HTTP-klientbibliotek fra Mashape. Sammen med Java er den også tilgjengelig for Node.js, .Net, Python, Ruby, etc.

Før vi hopper inn, vær oppmerksom på at vi bruker mocky.io for alle HTTP-forespørsler her.

2. Maven-oppsett

For å komme i gang, la oss først legge til de nødvendige avhengighetene:

 com.mashape.unirest unirest-java 1.4.9 

Sjekk ut den siste versjonen her.

3. Enkle forespørsler

La oss sende en enkel HTTP-forespørsel for å forstå semantikken i rammeverket:

@Test offentlig ugyldig skalReturnStatusOkay () {HttpResponse jsonResponse = Unirest.get ("// www.mocky.io/v2/5a9ce37b3100004f00ab5154") .header ("accept", "application / json"). QueryString ("apiKey", " 123 ") .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (200, jsonResponse.getStatus ()); }

Legg merke til at API er flytende, effektiv og ganske lett å lese.

Vi sender overskrifter og parametere med Overskrift() og Enger() APIer.

Og forespørselen blir påberopt på asJson () metode samtale; vi har også andre alternativer her, for eksempel asBinary (), asString () og asObject ().

For å passere flere overskrifter eller felt kan vi lage et kart og sende dem til .headers (Map headers) og .felt (kartfelt) henholdsvis:

@Test offentlig tomrom børReturnStatusAccepted () {Map headers = new HashMap (); headers.put ("godta", "applikasjon / json"); headers.put ("Autorisasjon", "Bearer 5a9ce37b3100004f00ab5154"); Kartfelt = nytt HashMap (); fields.put ("navn", "Sam Baeldung"); fields.put ("id", "PSP123"); HttpResponse jsonResponse = Unirest.put ("// www.mocky.io/v2/5a9ce7853100002a00ab515e"). Headers (headers) .fields (felt) .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (202, jsonResponse.getStatus ()); }

3.1. Bestått spørringsparameter

Å overføre data som et spørsmål Streng, vi bruker queryString () metode:

HttpResponse jsonResponse = Unirest.get ("// www.mocky.io/v2/5a9ce37b3100004f00ab5154") .queryString ("apiKey", "123")

3.2. Bruke Path Params

For å overføre eventuelle URL-parametere kan vi bruke routeParam () metode:

HttpResponse jsonResponse = Unirest.get ("// www.mocky.io/v2/5a9ce37b3100004f00ab5154/{userId}") .routeParam ("userId", "123")

Parameterens plassholdernavn må være det samme som det første argumentet for metoden.

3.3. Forespørsler med kropp

Hvis forespørselen vår krever en streng / JSON-kropp, sender vi den ved hjelp av kropp() metode:

@Test offentlig ugyldig givenRequestBodyWhenCreatedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d") .body ("{\" name \ ": \" Sam Baeldung \ ", \" city \ ": \" viena \ "}") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

3.4. Objektkartlegger

For å bruke asObject () eller kropp() i forespørselen må vi definere objektmapperen vår. For enkelhets skyld vil vi bruke Jackson-kartleggeren.

La oss først legge til følgende avhengigheter til pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.9.4 

Bruk alltid den nyeste versjonen på Maven Central.

La oss nå konfigurere kartleggeren vår:

Unirest.setObjectMapper (new ObjectMapper () {com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper (); public String writeValue (Object value) {return mapper.writeValueAsString (value);} public T readValue (String value, Class valueType) {return mapper.readValue (value, valueType);}});

Noter det setObjectMapper () skal bare ringes en gang, for å sette kartleggeren; Når kartleggerinstansen er angitt, vil den brukes til alle forespørsler og svar.

La oss nå teste den nye funksjonaliteten ved hjelp av en tilpasset Artikkel gjenstand:

@Test offentlig ugyldighet gittArticleWhenCreatedThenCorrect () {Article article = new Article ("ID1213", "Guide to Rest", "baeldung"); HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d"). Kropp (artikkel) .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

4. Be om metoder

I likhet med enhver HTTP-klient, gir rammeverket separate metoder for hvert HTTP-verb:

POST:

Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

SETTE:

Unirest.put ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

FÅ:

Unirest.get ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

SLETT:

Unirest.delete ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

LAPP:

Unirest.patch ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

ALTERNATIVER:

Unirest.options ("// www.mocky.io/v2/5a9ce7663100006800ab515d")

5. Svarmetoder

Når vi har fått svaret, kan du sjekke statuskoden og statusmeldingen:

// ... jsonResponse.getStatus () // ...

Pakk ut topptekstene:

// ... jsonResponse.getHeaders (); // ...

Få svarorganet:

// ... jsonResponse.getBody (); jsonResponse.getRawBody (); // ...

Legg merke til at, getRawBody (), returnerer en strøm av det uparsede responsorganet, mens getBody () returnerer den analyserte kroppen, ved hjelp av objektmapperen som ble definert i den tidligere delen.

6. Håndtering av asynkrone forespørsler

Unirest har også muligheten til å håndtere asynkrone forespørsler - ved hjelp av java.util.concurrent.Future og tilbakeringingsmetoder:

@Test offentlig ugyldig nårAysncRequestShouldReturnOk () {Future fremtid = Unirest.post ("//www.mocky.io/v2/5a9ce37b3100004f00ab5154?mocky-delay=10000ms"). header ("godta", "applikasjon / json") .asJsonAsync (ny tilbakeringing () {offentlig ugyldighet mislyktes (UnirestException e) {// Gjør noe hvis forespørselen mislyktes} offentlig ugyldig fullført (HttpResponse-svar) {// Gjør noe hvis forespørselen er vellykket} offentlig ugyldig annullert () {// Gjør noe hvis forespørselen blir kansellert}}) ; assertEquals (200, future.get (). getStatus ()); }

De com.mashape.unirest.http.async.Callback grensesnittet gir tre metoder, mislyktes (), avbrutt() og fullført ().

Overstyr metodene for å utføre de nødvendige operasjonene avhengig av responsen.

7. Filopplastinger

For å laste opp eller sende en fil som en del av forespørselen, send inn en java.io. fil objekt som et felt med navnefil:

@Test offentlig ugyldig givenFileWhenUploadedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("fil", ny fil ("/ sti / til / fil")). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

Vi kan også bruke ByteStream:

@Test offentlig ugyldig givenByteStreamWhenUploadedThenCorrect () {try (InputStream inputStream = new FileInputStream (new File ("/ path / to / file / artcile.txt"))) {byte [] bytes = new byte [inputStream.available ()]; inputStream.read (byte); HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("fil", byte, "article.txt") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

Eller bruk inngangsstrømmen direkte, og legg til ContentType.APPLICATION_OCTET_STREAM som det andre argumentet i Enger() metode:

@Test offentlig ugyldig givenInputStreamWhenUploadedThenCorrect () {try (InputStream inputStream = new FileInputStream (new File ("/ path / to / file / artcile.txt"))) {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io / v2 / 5a9ce7663100006800ab515d ") .field (" file ", inputStream, ContentType.APPLICATION_OCTET_STREAM," article.txt "). asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

8. Unirest-konfigurasjoner

Rammeverket støtter også typiske konfigurasjoner av en HTTP-klient som tilkoblingssamling, tidsavbrudd, globale overskrifter etc.

La oss angi antall tilkoblinger og antall maksimale forbindelser per rute:

Unirest.setConcurrency (20, 5);

Konfigurer tidsavbrudd for tilkobling og stikkontakt:

Unirest.setTimeouts (20000, 15000);

Merk at tidsverdiene er i millisekunder.

La oss nå sette HTTP-overskrifter for alle våre forespørsler:

Unirest.setDefaultHeader ("X-app-name", "baeldung-unirest"); Unirest.setDefaultHeader ("X-forespørsel-id", "100004f00ab5");

Vi kan fjerne globale overskrifter når som helst:

Unirest.clearDefaultHeaders ();

På et tidspunkt kan det hende at vi må komme med forespørsler via en proxy-server:

Unirest.setProxy (ny HttpHost ("localhost", 8080));

Et viktig aspekt å være klar over er å lukke eller avslutte søknaden. Unirest gyter en bakgrunnsbegivenhetssløyfe for å håndtere operasjonene. Vi må stenge den sløyfen før vi avslutter applikasjonen:

Unirest.shutdown ();

9. Konklusjon

I denne veiledningen fokuserte vi på det lette HTTP-klientrammeverket - Unirest. Vi jobbet med noen enkle eksempler, både i synkrone, men også asynkroniserte moduser.

Til slutt brukte vi også flere avanserte konfigurasjoner - for eksempel tilkoblingssamling, proxy-innstillinger etc.

Som vanlig er kildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found