מדריך לאירועים

1. סקירה כללית

Unirest היא ספריית לקוח HTTP קלה מ- Mashape. יחד עם Java, זה זמין גם עבור Node.js, .Net, Python, Ruby וכו '.

לפני שנקפוץ, שים לב שנשתמש ב- mocky.io לכל בקשות ה- HTTP שלנו כאן.

2. הגדרת Maven

כדי להתחיל, בואו הוסף תחילה את התלות הדרושה:

 com.mashape.unirest unirest-java 1.4.9 

בדוק את הגרסה האחרונה כאן.

3. בקשות פשוטות

בואו נשלח בקשת HTTP פשוטה להבנת הסמנטיקה של המסגרת:

@Test ציבורי בטל צריךReturnStatusOkay () {HttpResponse jsonResponse = Unirest.get ("// www.mocky.io/v2/5a9ce37b3100004f00ab5154"). כותרת ("קבל", "application / json"). QueryString ("apiKey", " 123 ") .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (200, jsonResponse.getStatus ()); }

שימו לב שממשק ה- API שוטף, יעיל ודי קל לקריאה.

אנו מעבירים כותרות ופרמטרים עם ה- כּוֹתֶרֶת() ו שדות () ממשקי API.

והבקשה מופעלת על asJson () שיחת שיטה; יש לנו כאן גם אפשרויות אחרות, כגון asBinary (), asString () ו asObject ().

כדי להעביר מספר כותרות או שדות, אנו יכולים ליצור מפה ולהעביר אותם אליה כותרות (כותרות מפה) ו . שדות (שדות מפה) בהתאמה:

בטל ציבורי @Test צריךReturnStatusAccepted () {כותרות מפה = HashMap חדש (); headers.put ("קבל", "יישום / json"); headers.put ("הרשאה", "נושא 5a9ce37b3100004f00ab5154"); שדות מפה = HashMap חדש (); fields.put ("שם", "סם באלדונג"); fields.put ("id", "PSP123"); HttpResponse jsonResponse = Unirest.put ("// www.mocky.io/v2/5a9ce7853100002a00ab515e"). כותרות (כותרות). שדות (שדות) .asJson (); assertNotNull (jsonResponse.getBody ()); assertEquals (202, jsonResponse.getStatus ()); }

3.1. העברת פראמרי שאילתות

להעביר נתונים כשאילתה חוּט, נשתמש ב- queryString () שיטה:

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

3.2. שימוש ב Params Path

להעברת פרמטרים של כתובות אתרים, אנו יכולים להשתמש ב- routeParam () שיטה:

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

שם מציין המיקום של הפרמטר חייב להיות זהה לארגומנט הראשון לשיטה.

3.3. בקשות עם גוף

אם בקשתנו דורשת מחרוזת / גוף JSON, אנו מעבירים אותה באמצעות ה- גוּף() שיטה:

@Test ציבורי בטל givenRequestBodyWhenCreatedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d"). גוף ("{\" name \ ": \" סם באלדונג \ ", \" עיר \ ": \" ויאנה \ "}"). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

3.4. ממפה אובייקטים

על מנת להשתמש ב- asObject () אוֹ גוּף() בבקשה עלינו להגדיר את מיפוי האובייקטים שלנו. לשם פשטות נשתמש במפת האובייקטים של ג'קסון.

בואו קודם להוסיף את התלות הבאות ל pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.9.4 

השתמש תמיד בגרסה האחרונה ב- Maven Central.

עכשיו בואו להגדיר את המפה שלנו:

Unirest.setObjectMapper (ObjectMapper חדש () {com.fasterxml.jackson.databind.ObjectMapper mapper = com.fasterxml.jackson.databind.ObjectMapper חדש) (public; public String writeValue (Value Object) {return mapper.writeValueAsString (value);} T readValue ציבורי (ערך מחרוזת, Class valueType) {mapper.readValue return (value, valueType);}});

ציין זאת setObjectMapper () צריך להתקשר רק פעם אחת, להגדרת המפה; לאחר הגדרת מופע המיפוי, הוא ישמש לכל הבקשות והתגובות.

בואו נבדוק כעת את הפונקציונליות החדשה באמצעות מותאם אישית מאמר לְהִתְנַגֵד:

@ מבחן בטל פומבי givenArticleWhenCreatedThenCorrect () {Article article = מאמר חדש ("ID1213", "מדריך למנוחה", "baeldung"); HttpResponse jsonResponse = Unirest.post ("// www.mocky.io/v2/5a9ce7663100006800ab515d"). גוף (מאמר) .asJson (); assertEquals (201, jsonResponse.getStatus ()); }

4. שיטות בקשה

בדומה לכל לקוח HTTP, המסגרת מספקת שיטות נפרדות לכל פועל HTTP:

הודעה:

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

לָשִׂים:

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

לקבל:

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

לִמְחוֹק:

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

תיקון:

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

אפשרויות:

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

5. שיטות תגובה

לאחר שנקבל את התגובה, בוא לבדוק את קוד הסטטוס והודעת הסטטוס:

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

חלץ את הכותרות:

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

קבל את גוף התגובה:

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

שימו לב לכך, ה getRawBody (), מחזיר זרם של גוף התגובה שלא נותח, ואילו ה- getBody () מחזיר את הגוף המנותח, באמצעות מיפוי האובייקטים שהוגדר בסעיף הקודם.

6. טיפול בבקשות אסינכרוניות

ל- Unirest יש גם את היכולת לטפל בבקשות אסינכרוניות - באמצעות java.util.concurrent.Future ושיטות להתקשרות חוזרת:

@ מבחן ציבורי בטל כאשר AysncRequestShouldReturnOk () {עתיד future = Unirest.post ("//www.mocky.io/v2/5a9ce37b3100004f00ab5154?mocky-delay=10000ms"). כותרת ("קבל", "application / json") .asJsonAsync (התקשרות חוזרת () (הריק הציבורי נכשל (UnirestException e) {// עשה משהו אם הבקשה נכשלה} הושלם הריק הציבורי (תגובת HttpResponse) {// עשה משהו אם הבקשה הצליחה} הריק הציבורי בוטל () {// עשה משהו אם הבקשה בוטלה}}) ; assertEquals (200, future.get (). getStatus ()); }

ה com.mashape.unirest.http.async.Callback הממשק מספק שלוש שיטות, נִכשָׁל(), מבוטל() ו הושלם ().

עקוף את השיטות לביצוע הפעולות הדרושות בהתאם לתגובה.

7. העלאות קבצים

כדי להעלות או לשלוח קובץ כחלק מהבקשה, העבירו a java.io. קובץ אובייקט כשדה עם קובץ שם:

@Test ציבורי בטל givenFileWhenUploadedThenCorrect () {HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d"). שדה ("קובץ", קובץ חדש ("/ path / to / file")). asJson (); assertEquals (201, jsonResponse.getStatus ()); }

אנחנו יכולים גם להשתמש ByteStream:

@ מבחן חלל ציבורי givenByteStreamWhenUploadedThenCorrect () {try (InputStream inputStream = FileInputStream חדש (קובץ חדש ("/ path / to / file / artcile.txt"))) {byte [] bytes = byte new [inputStream.available ()]; inputStream.read (בתים); HttpResponse jsonResponse = Unirest.post ("//www.mocky.io/v2/5a9ce7663100006800ab515d"). שדה ("קובץ", בתים, "article.txt") .asJson (); assertEquals (201, jsonResponse.getStatus ()); }}

או השתמש בזרם הקלט ישירות והוסף את ה- ContentType.APPLICATION_OCTET_STREAM כטענה השנייה ב שדות () שיטה:

@Test ציבורי בטל givenInputStreamWhenUploadedThenCorrect () {נסה (InputStream inputStream = FileInputStream חדש (קובץ חדש ("/ 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

המסגרת תומכת גם בתצורות אופייניות של לקוח HTTP כמו איגום חיבורים, פסק זמן, כותרות גלובליות וכו '.

בואו נקבע את מספר החיבורים ומספר החיבורים המרבי לכל מסלול:

Unirest.setConcurrency (20, 5);

הגדר פסק זמן לחיבור ושקע:

Unirest.setTimeouts (20000, 15000);

שים לב שערכי הזמן הם באלפיות השנייה.

עכשיו בואו נקבע כותרות HTTP לכל הבקשות שלנו:

Unirest.setDefaultHeader ("X-app-name", "baeldung-unirest"); Unirest.setDefaultHeader ("מזהה X- בקשה", "100004f00ab5");

אנו יכולים לנקות את הכותרות הגלובליות בכל עת:

Unirest.clearDefaultHeaders ();

בשלב מסוים, ייתכן שנצטרך להגיש בקשות דרך שרת proxy:

Unirest.setProxy (HttpHost חדש ("localhost", 8080));

היבט חשוב שכדאי להיות מודע אליו הוא סגירה או יציאה מהיישום בחן. Unirest מוליך לולאת אירוע רקע כדי לטפל בפעולות, עלינו לסגור את הלולאה הזו לפני היציאה מהיישום שלנו:

Unirest. shutdown ();

9. מסקנה

במדריך זה התמקדנו במסגרת לקוח HTTP קל משקל - Unirest. עבדנו עם כמה דוגמאות פשוטות, גם במצבים סינכרוניים אך גם לא סינכרון.

לבסוף, השתמשנו גם בכמה תצורות מתקדמות - כגון איגום חיבורים, הגדרות פרוקסי וכו '.

כרגיל, קוד המקור זמין ב- GitHub.


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