Útmutató az Uniresthez

1. Áttekintés

Az Unirest egy könnyű HTTP kliens könyvtár a Mashape-től. A Java mellett elérhető a Node.js, .Net, Python, Ruby stb.

Mielőtt beugranánk, vegye figyelembe, hogy az összes HTTP kéréshez a mocky.io fájlt fogjuk használni.

2. Maven Setup

A kezdéshez először adjuk hozzá a szükséges függőségeket:

 com.mashape.unirest unirest-java 1.4.9 

Itt tekintheti meg a legújabb verziót.

3. Egyszerű kérések

Küldjünk egy egyszerű HTTP kérést, hogy megértsük a keretrendszer szemantikáját:

@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 ()); }

Figyelje meg, hogy az API folyékony, hatékony és könnyen olvasható.

Fejléceket és paramétereket adunk át a fejléc() és mezők () API-k.

És a kérésre hivatkozni fogunk a asJson () módszerhívás; más lehetőségeink is vannak itt, például asBinary (), asString () és asObject ().

Több fejléc vagy mező átadásához létrehozhatunk egy térképet, és továbbíthatjuk őket .headers (Térképfejlécek) és .fields (Térképmezők) illetőleg:

@Test public void shouldReturnStatusAccepted () {Map headers = new HashMap (); fejlécek.put ("elfogad", "alkalmazás / json"); fejlécek.put ("Engedélyezés", "Viselő 5a9ce37b3100004f00ab5154"); Térképmezők = new HashMap (); fields.put ("név", "Sam Baeldung"); fields.put ("id", "PSP123"); HttpResponse jsonResponse = Unirest.put ("// www.mocky.io/v2/5a9ce7853100002a00ab515e") .fejek (fejlécek). Mezők (mezők) .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (202, jsonResponse.getStatus ()); }

3.1. A lekérdezési paraméterek átadása

Adatok továbbítása lekérdezésként Húr, használjuk a queryString () módszer:

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

3.2. Path Params használata

Bármely URL paraméter átadásához használhatjuk a routeParam () módszer:

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

A paraméter helyőrzőjének meg kell egyeznie a módszer első argumentumával.

3.3. Kérelmek testtel

Ha kérésünkhez karakterlánc / JSON törzs szükséges, akkor a test() módszer:

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

3.4. Object Mapper

A asObject () vagy test() a kérésben meg kell határoznunk az objektumleképezőt. Az egyszerűség kedvéért a Jackson objektumleképezőt fogjuk használni.

Tegyük hozzá először a következő függőségeket pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.9.4 

Mindig használja a Maven Central legfrissebb verzióját.

Most konfiguráljuk a térképkészítőnket:

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

Vegye figyelembe, hogy setObjectMapper () csak egyszer kell meghívni a leképező beállításához; amint a leképező példány be van állítva, minden kéréshez és válaszhoz felhasználásra kerül.

Most teszteljük az új funkcionalitást egy egyedi használatával Cikk tárgy:

@Test public void givenArticleWhenCreatedThenCorrect () {Article Article = new Article ("ID1213", "Útmutató a pihenéshez", "baeldung"); HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d") .body (cikk) .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

4. Kérjen módszereket

A keretrendszer minden HTTP-klienshez hasonlóan különálló módszereket biztosít minden HTTP-igéhez:

POST:

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

PUT:

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

KAP:

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

TÖRÖL:

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

TAPASZ:

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

OPCIÓK:

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

5. Válaszolási módszerek

Miután megkaptuk a választ, ellenőrizzük az állapotkódot és az állapotüzenetet:

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

Bontsa ki a fejléceket:

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

Szerezze be a válasz testet:

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

Vegyük észre, hogy a getRawBody (), a nem válaszolt test áramát adja vissza, míg a getBody () az elemzett törzset adja vissza az előző szakaszban definiált objektumleképező segítségével.

6. Aszinkron kérések kezelése

Az Unirest emellett képes aszinkron kérelmek kezelésére is java.util.concurrent.Jövő és visszahívási módszerek:

@Test public void whenAysncRequestShouldReturnOk () {Future future = Unirest.post ("//www.mocky.io/v2/5a9ce37b3100004f00ab5154?mocky-delay=10000ms") .header ("accept", "application / json") .asJsonAsync (new Callback () {public void sikertelen (UnirestException e) {// Tegyen valamit, ha a kérés sikertelen volt} public void elkészült (HttpResponse válasz) {// Tegyen valamit, ha a kérés sikeres} public void törölve () {// Csináljon valamit, ha a kérést töröljük}}) ; assertEquals (200, jövő.get (). getStatus ()); }

A com.mashape.unirest.http.async.Callback interfész három módszert kínál, nem sikerült(), törölve() és elkészült ().

A szükséges műveletek végrehajtásának módszereit a válasz függvényében írja felül.

7. Fájl feltöltések

Fájl feltöltéséhez vagy elküldéséhez a kérelem részeként adja át a java.io.Fájl objektum mező név névvel:

@Test public void givenFileWhenUploadedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("file", new File ("/ path / to / file")). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

Használhatjuk is 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 (byte); HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("fájl", bájtok, "cikk.txt") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

Vagy közvetlenül használja a bemeneti adatfolyamot, hozzáadva a ContentType.APPLICATION_OCTET_STREAM mint a második érv a mezők () módszer:

@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 (" fájl ", inputStream, ContentType.APPLICATION_OCTET_STREAM," cikk.txt "). asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

8. Unirest konfigurációk

A keretrendszer támogatja a HTTP kliens tipikus konfigurációit is, például a kapcsolatkészletet, az időtúllépéseket, a globális fejléceket stb.

Állítsuk be a kapcsolatok számát és az útvonalonkénti maximális kapcsolatok számát:

Unirest.setConcurrency (20, 5);

Konfigurálja a kapcsolatot és a foglalat időkorlátját:

Unirest.setTimeouts (20000, 15000);

Vegye figyelembe, hogy az időértékek ezredmásodpercekben vannak megadva.

Most állítsunk be HTTP fejléceket minden kérésünkhöz:

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

Bármikor törölhetjük a globális fejléceket:

Unirest.clearDefaultHeaders ();

Valamikor előfordulhat, hogy egy proxy szerveren keresztül kell kérelmeket benyújtanunk:

Unirest.setProxy (új HttpHost ("localhost", 8080));

Az egyik fontos szempont, amellyel tisztában kell lenni, az az alkalmazás kecses bezárása vagy kilépése. Az Unirest egy háttér-eseményhurkot hoz létre a műveletek kezeléséhez, ezt a kört le kell állítanunk, mielőtt kilépnénk az alkalmazásunkból:

Unirest.leállítás ();

9. Következtetés

Ebben az oktatóanyagban a könnyű HTTP kliens keretrendszerre összpontosítottunk - az Unirest. Néhány egyszerű példával dolgoztunk, mind szinkron, mind aszinkron módban.

Végül számos speciális konfigurációt is használtunk - például a kapcsolatkészletet, a proxy beállításokat stb.

Szokás szerint a forráskód elérhető a GitHubon.