Een gids voor Unirest

1. Overzicht

Unirest is een lichtgewicht HTTP-clientbibliotheek van Mashape. Samen met Java is het ook beschikbaar voor Node.js, .Net, Python, Ruby, enz.

Voordat we beginnen, moet u er rekening mee houden dat we mocky.io hier voor al onze HTTP-verzoeken gebruiken.

2. Maven-instellingen

Laten we om te beginnen eerst de nodige afhankelijkheden toevoegen:

 com.mashape.unirest unirest-java 1.4.9 

Bekijk hier de laatste versie.

3. Eenvoudige verzoeken

Laten we een eenvoudig HTTP-verzoek sturen om de semantiek van het framework te begrijpen:

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

Merk op dat de API vloeiend, efficiënt en vrij gemakkelijk te lezen is.

We geven kopteksten en parameters door met de koptekst () en velden () API's.

En het verzoek wordt aangeroepen op de asJson () methode oproep; we hebben hier ook andere opties, zoals asBinary (), asString () en asObject ().

Om meerdere headers of velden door te geven, kunnen we een kaart maken en deze doorgeven .headers (kaartkoppen) en .fields (kaartvelden) respectievelijk:

@Test openbare void shouldReturnStatusAccepted () {Map headers = new HashMap (); headers.put ("accept", "application / json"); headers.put ("Autorisatie", "Bearer 5a9ce37b3100004f00ab5154"); Kaartvelden = nieuwe HashMap (); fields.put ("naam", "Sam Baeldung"); fields.put ("id", "PSP123"); HttpResponse jsonResponse = Unirest.put ("// www.mocky.io/v2/5a9ce7853100002a00ab515e") .headers (headers) .fields (velden) .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (202, jsonResponse.getStatus ()); }

3.1. Query-parameters doorgeven

Om gegevens door te geven als een vraag Draad, we zullen de queryString () methode:

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

3.2. Padparameters gebruiken

Voor het doorgeven van URL-parameters kunnen we de routeParam () methode:

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

De naam van de tijdelijke aanduiding voor de parameter moet hetzelfde zijn als het eerste argument voor de methode.

3.3. Verzoeken met lichaam

Als ons verzoek een string / JSON-body vereist, geven we deze door met behulp van de lichaam() methode:

@Test openbare ongeldig gegevenRequestBodyWhenCreatedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d") .body ("{\" naam \ ": \" Sam Baeldung \ ", \" plaats \ ": \" viena \ "}") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

3.4. Object Mapper

Om de asObject () of lichaam() in het verzoek moeten we onze object-mapper definiëren. Voor de eenvoud gebruiken we de Jackson-objecttoewijzer.

Laten we eerst de volgende afhankelijkheden toevoegen aan pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.9.4 

Gebruik altijd de nieuwste versie op Maven Central.

Laten we nu onze mapper configureren:

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

Let daar op setObjectMapper () zou slechts één keer moeten worden aangeroepen om de mapper in te stellen; Zodra de mapper-instantie is ingesteld, wordt deze gebruikt voor alle verzoeken en reacties.

Laten we nu de nieuwe functionaliteit testen met een aangepast Artikel voorwerp:

@Test openbare ongeldig gegevenArticleWhenCreatedThenCorrect () {Article article = nieuw artikel ("ID1213", "Guide to Rest", "baeldung"); HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d") .body (artikel) .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

4. Verzoekmethoden

Net als bij elke HTTP-client, biedt het framework afzonderlijke methoden voor elk HTTP-werkwoord:

POST:

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

LEGGEN:

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

KRIJGEN:

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

VERWIJDEREN:

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

PATCH:

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

OPTIES:

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

5. Reactiemethoden

Zodra we het antwoord hebben ontvangen, controleert u de statuscode en het statusbericht:

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

Pak de kopteksten uit:

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

Ontvang de antwoordtekst:

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

Merk op dat de getRawBody (), geeft een stroom van de niet-geparseerde antwoordtekst terug, terwijl de getBody () geeft de geparseerde body terug, gebruikmakend van de objecttoewijzer gedefinieerd in de eerdere sectie.

6. Asynchrone verzoeken afhandelen

Unirest heeft ook de mogelijkheid om asynchrone verzoeken af ​​te handelen - met behulp van java.util.concurrent.Future en callback-methoden:

@Test openbare ongeldigheid whenAysncRequestShouldReturnOk () {Future future = Unirest.post ("//www.mocky.io/v2/5a9ce37b3100004f00ab5154?mocky-delay=10000ms") .header ("accept", "application / json") .asJsonAsync (new Callback () {openbare leegte mislukt (UnirestException e) {// Doe iets als het verzoek is mislukt} public void voltooid (HttpResponse response) {// Doe iets als het verzoek succesvol is} public void geannuleerd () {// Doe iets als het verzoek is geannuleerd}}) ; assertEquals (200, future.get (). getStatus ()); }

De com.mashape.unirest.http.async.Callback interface biedt drie methoden, mislukt (), geannuleerd() en voltooid().

Overschrijf de methoden om de nodige bewerkingen uit te voeren, afhankelijk van de respons.

7. Uploads van bestanden

Als u een bestand wilt uploaden of verzenden als onderdeel van het verzoek, geeft u een java.io.File object als een veld met naam bestand:

@Test openbare ongeldig gegevenFileWhenUploadedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("bestand", nieuw bestand ("/ pad / naar / bestand")). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

We kunnen ook gebruik maken van ByteStream:

@Test openbare ongeldige gegevenByteStreamWhenUploadedThenCorrect () {probeer (InputStream inputStream = nieuwe FileInputStream (nieuw bestand ("/ pad / naar / bestand / artcile.txt"))) {byte [] bytes = nieuwe byte [inputStream.available ()]; inputStream.read (bytes); HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d") .field ("file", bytes, "article.txt") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

Of gebruik de invoerstroom rechtstreeks en voeg de ContentType.APPLICATION_OCTET_STREAM als het tweede argument in de velden () methode:

@Test openbare ongeldige gegevenInputStreamWhenUploadedThenCorrect () {probeer (InputStream inputStream = nieuwe FileInputStream (nieuw bestand ("/ pad / naar / bestand / 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 configuraties

Het framework ondersteunt ook typische configuraties van een HTTP-client zoals pooling van verbindingen, time-outs, globale headers enz.

Laten we het aantal verbindingen en het maximale aantal verbindingen per route instellen:

Unirest.setConcurrency (20, 5);

Time-outs voor verbinding en socket configureren:

Unirest.setTimeouts (20000, 15000);

Merk op dat de tijdwaarden in milliseconden zijn.

Laten we nu HTTP-headers instellen voor al onze verzoeken:

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

We kunnen de globale headers op elk moment wissen:

Unirest.clearDefaultHeaders ();

Op een gegeven moment moeten we mogelijk verzoeken indienen via een proxyserver:

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

Een belangrijk aspect om op te letten, is het netjes sluiten of afsluiten van de applicatie. Unirest spawnt een achtergrondgebeurtenislus om de operaties af te handelen, we moeten die lus afsluiten voordat we onze applicatie afsluiten:

Unirest.shutdown ();

9. Conclusie

In deze zelfstudie hebben we ons gericht op het lichtgewicht HTTP-clientraamwerk - Unirest. We werkten met enkele eenvoudige voorbeelden, zowel in synchrone als asynchrone modus.

Ten slotte hebben we ook verschillende geavanceerde configuraties gebruikt - zoals pooling van verbindingen, proxy-instellingen enz.

Zoals gewoonlijk is de broncode beschikbaar op GitHub.


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