Sprievodca po Unirest

1. Prehľad

Unirest je ľahká klientská knižnica HTTP od spoločnosti Mashape. Spolu s Javou je k dispozícii aj pre Node.js, .Net, Python, Ruby atď.

Predtým, ako sa prihlásime, nezabudnite, že tu použijeme mocky.io pre všetky naše požiadavky HTTP.

2. Nastavenie Maven

Na začiatok najskôr pridáme potrebné závislosti:

 com.mashape.unirest unirest-java 1.4.9 

Najnovšiu verziu nájdete tu.

3. Jednoduché žiadosti

Poďme poslať jednoduchú požiadavku HTTP, aby sme pochopili sémantiku rámca:

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

Všimnite si, že API je plynulé, efektívne a ľahko čitateľné.

Predávame hlavičky a parametre s hlavička () a polia () API.

A žiadosť sa vyvolá na serveri asJson () volanie metódy; máme tu aj ďalšie možnosti, ako napr asBinary (), asString () a asObject ().

Aby sme mohli odovzdať viac hlavičiek alebo polí, môžeme vytvoriť mapu a odovzdať ich .headers (Hlavičky mapy) a .pole (polia mapy) respektíve:

@Test public void shouldReturnStatusAccepted () {Map headers = new HashMap (); headers.put ("prijať", "aplikácia / json"); headers.put ("Autorizácia", "Nositeľ 5a9ce37b3100004f00ab5154"); Polia mapy = nová HashMap (); fields.put ("meno", "Sam Baeldung"); fields.put ("id", "PSP123"); HttpResponse jsonResponse = Unirest.put ("// www.mocky.io/v2/5a9ce7853100002a00ab515e") .headers (headers) .fields (fields) .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (202, jsonResponse.getStatus ()); }

3.1. Predávanie parametrov dopytu

Na odovzdanie údajov ako dopyt Reťazec, použijeme queryString () metóda:

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

3.2. Používanie parametrov cesty

Na odovzdanie akýchkoľvek parametrov adresy URL môžeme použiť routeParam () metóda:

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

Názov zástupného parametra musí byť rovnaký ako prvý argument metódy.

3.3. Žiadosti s telom

Ak naša požiadavka vyžaduje telo reťazca / JSON, odovzdáme ho pomocou telo () metóda:

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

3.4. Mapovač objektov

Aby bolo možné použiť asObject () alebo telo () v žiadosti musíme definovať náš mapovač objektov. Pre jednoduchosť použijeme mapovač objektov Jackson.

Najprv pridajme nasledujúce závislosti pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.9.4 

Vždy používajte najnovšiu verziu na Maven Central.

Teraz nakonfigurujme náš mapovač:

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

Poznač si to setObjectMapper () by sa malo volať iba raz, kvôli nastaveniu mapovača; keď je inštancia mapovača nastavená, použije sa na všetky požiadavky a odpovede.

Poďme si teraz vyskúšať novú funkcionalitu pomocou vlastného nástroja Článok objekt:

@Test public void givenArticleWhenCreatedThenCorrect () {Article article = nový článok ("ID1213", "Guide to Rest", "baeldung"); HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d") .body (článok) .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

4. Vyžiadajte si metódy

Podobne ako ktorýkoľvek iný klient HTTP poskytuje rámec samostatné metódy pre každé sloveso HTTP:

POST:

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

PUT:

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

ZÍSKAJTE:

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

ODSTRÁNIŤ:

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

PATCH:

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

MOŽNOSTI:

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

5. Metódy odpovede

Keď dostaneme odpoveď, skontrolujte stavový kód a stavovú správu:

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

Extrahujte hlavičky:

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

Získajte text odpovede:

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

Všimnite si, že getRawBody (), vráti prúd nespracovaného tela odpovede, zatiaľ čo getBody () vráti analyzované telo pomocou mapovača objektov definovaného v predchádzajúcej časti.

6. Vybavovanie asynchrónnych požiadaviek

Unirest má tiež schopnosť vybavovať asynchrónne požiadavky - pomocou java.util.concurrent.Future a metódy spätného volania:

@Test public void whenAysncRequestShouldReturnOk () {Future future = Unirest.post ("//www.mocky.io/v2/5a9ce37b3100004f00ab5154?mocky-delay=10000ms") .header ("accept", "application / json") .asJsonAsync (nové spätné volanie () {public void failed (UnirestException e) {// Urobte niečo, ak požiadavka zlyhala} public void completed (HttpResponse response) {// Urobte niečo, ak je požiadavka úspešná} public void cancelled () {// Urobte niečo, ak je požiadavka zrušená}}) ; assertEquals (200, future.get (). getStatus ()); }

The com.mashape.unirest.http.async.Callback rozhranie poskytuje tri metódy, zlyhalo (), zrušené () a dokončené ().

Prepíšte metódy vykonávania potrebných operácií v závislosti od reakcie.

7. Nahrávanie súborov

Ak chcete v rámci žiadosti odovzdať alebo odoslať súbor, odovzdajte a java.io.Súbor objekt ako pole s menným súborom:

@Test public void givenFileWhenUploadedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("súbor", nový súbor ("/ cesta / k / súboru")). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

Môžeme tiež použiť ByteStream:

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

Alebo priamo použite vstupný prúd a pridajte znak ContentType.APPLICATION_OCTET_STREAM ako druhý argument v polia () metóda:

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

8. Unirest konfigurácie

Rámec podporuje aj typické konfigurácie klienta HTTP, ako je združovanie pripojení, časové limity, globálne hlavičky atď.

Nastavme počet pripojení a počet maximálnych pripojení na trase:

Unirest.setConcurrency (20, 5);

Konfigurácia časových limitov pripojenia a zásuvky:

Unirest.setTimeouts (20000, 15000);

Upozorňujeme, že časové hodnoty sú v milisekundách.

Teraz nastavíme hlavičky HTTP pre všetky naše požiadavky:

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

Globálne hlavičky môžeme vyčistiť kedykoľvek:

Unirest.clearDefaultHeaders ();

V určitom okamihu bude možno potrebné zadávať požiadavky prostredníctvom servera proxy:

Unirest.setProxy (nový HttpHost ("localhost", 8080));

Jedným z dôležitých aspektov, ktoré si musíte uvedomiť, je elegantné zatvorenie alebo ukončenie aplikácie. Unirest zobrazí slučku udalostí na pozadí, aby sme zvládli operácie, musíme túto slučku pred ukončením našej aplikácie vypnúť:

Unirest.shutdown ();

9. Záver

V tomto tutoriáli sme sa zamerali na ľahký rámec klienta HTTP - Unirest. Pracovali sme s niekoľkými jednoduchými príkladmi, a to v synchrónnych, ale aj asynchrónnych režimoch.

Nakoniec sme použili aj niekoľko pokročilých konfigurácií - napríklad združovanie pripojení, nastavenie servera proxy atď.

Zdrojový kód je ako obvykle k dispozícii na serveri GitHub.


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