Ú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.