מדריך מהיר לעבודה עם שירותי אינטרנט בגרובי

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

כיום אנו רואים מגוון דרכים לחשיפת נתונים על ידי יישום באינטרנט.

לעתים קרובות, היישום משתמש בשירות אינטרנט SOAP או REST כדי לחשוף את ממשקי ה- API שלהם. עם זאת, יש לקחת בחשבון גם פרוטוקולי זרימה כמו RSS ו- Atom.

במדריך מהיר זה נחקור כמה דרכים שימושיות לעבודה עם שירותי רשת ב- Groovy עבור כל אחד מהפרוטוקולים הללו.

2. ביצוע בקשות HTTP

ראשית, בוא נבצע בקשת HTTP GET פשוטה באמצעות ה- כתובת אתר מעמד. אנו נצרוך את ממשקי ה- API של הדוור הד במהלך הבדיקה שלנו.

ראשית, נקרא openConnection שיטת ה- כתובת אתר ואז להגדיר את בקשת שיטה להשיג:

def postmanGet = URL חדש ('// postman-echo.com/get') def getConnection = postmanGet.openConnection () getConnection.requestMethod = 'GET' טוען getConnection.responseCode == 200

באופן דומה, אנו יכולים להגיש בקשת POST על ידי הגדרת ה- בקשת שיטה לפרסם:

def postmanPost = URL חדש ('// postman-echo.com/post') def postConnection = postmanPost.openConnection () postConnection.requestMethod = 'POST' טוען postConnection.responseCode == 200

כמו כן, אנו יכולים להעביר את הפרמטרים לבקשת POST באמצעות ה- outputStream.withWriter:

def form = "param1 = זהו פרמטר של בקשה." postConnection.doOutput = טקסט def def postConnection.with {outputStream.withWriter {outputStreamWriter -> outputStreamWriter << form} text = content.text} טוען postConnection.responseCode == 200

הנה, גרובי עם סגירה נראית די שימושית והופכת את הקוד לנקי יותר.

בואו נשתמש ב- JsonSlurper לנתח את חוּט תגובה ל- JSON:

JsonSlurper jsonSlurper = JsonSlurper חדש () טוען jsonSlurper.parseText (טקסט) ?. json.param1 == "זהו פרמטר הבקשה."

3. RSS ו- Atom Feeds

עדכוני RSS ו- Atom הם דרכים נפוצות לחשיפת התכנים כמו חדשות, בלוגים ופורומים טכניים באינטרנט.

כמו כן, שני העדכונים מעוצבים ב- XML. לכן אנו יכולים להשתמש בגרובי XMLParser בכיתה לנתח את התוכן.

בואו נקרא כמה סיפורים מובילים מחדשות Google המשתמשים בפיד ה- RSS שלהם:

def rssFeed = XmlParser חדש () .parse ("// news.google.com/rss?hl=iw&gl=US&ceid=US:en") def stories = [] (0..4). כל פריט def = rssFeed.channel.item.get (it) סיפורים << item.title.text ()} לטעון stories.size () == 5

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

def atomFeed = XmlParser חדש () .parse ("// news.google.com/atom?hl=en-US&gl=US&ceid=US:en") def stories = [] (0..4). כל ערך {def = atomFeed.entry.get (it) סיפורים << entry.title.text ()} לטעון stories.size () == 5

כמו כן, אנו מבינים ש- Groovy תומך בכל ספריות Java המומלצות ב- Groovy. לכן, אנו בוודאי יכולים להשתמש ב- API של רומא כדי לקרוא את עדכוני ה- RSS.

4. בקשת ותגובת SOAP

SOAP הוא אחד הפרוטוקולים הפופולאריים ביותר לשירות אתרים המשמשים יישומים לחשיפת שירותיהם באינטרנט.

נשתמש בספריית groovy-wslite לצריכת ממשקי ה- API של SOAP. בואו נוסיף את התלות האחרונה שלנו pom.xml:

 com.github.groovy-wslite גרובי-wslite 1.1.3 

לחלופין, אנו יכולים להוסיף את התלות האחרונה באמצעות Gradle:

קבוצת הידור: 'com.github.groovy-wslite', שם: 'groovy-wslite', גרסה: '1.1.3'

או אם אנחנו רוצים לכתוב תסריט גרובי. אנו יכולים להוסיף אותו ישירות באמצעות @לִתְפּוֹס:

@Grab (group = 'com.github.groovy-wslite', module = "groovy-wslite", גרסה = "1.1.3")

ספריית groovy-wslite מספקת את SOAPClient בכיתה לתקשר עם ממשקי API של SOAP. יחד עם זאת, יש לו את SOAPMessageBuilder בכיתה ליצירת הודעת הבקשה.

בוא נצרוך שירות SOAP להמרת מספר באמצעות ה- SOAPClient:

def url = "//www.dataaccess.com/webservicesserver/numberconversion.wso" def soapClient = new SOAPClient (url) def message = SOAPMessageBuilder new (). build ({body {NumberToWords (xmlns: "//www.dataaccess.) com / webservicesserver / ") {ubiNum (123)}}} def response = soapClient.send (message.toString ()); def def = response.NumberToWordsResponse טענת מילים == "מאה ועשרים ושלוש"

5. בקשת תשובה ותגובה

REST הוא סגנון אדריכלי פופולרי נוסף המשמש ליצירת שירותי אינטרנט. כמו כן, ממשקי ה- API נחשפים על בסיס שיטות HTTP כמו GET, POST, PUT ו- DELETE.

5.1. לקבל

נשתמש בספריית groovy-wslite שכבר דנו כדי לצרוך את ממשקי ה- API של REST. זה מספק את RESTClient שיעור לתקשורת ללא טרחה.

בואו להגיש בקשה ל- GET לממשק ה- API של פוסטמן שכבר נדון:

לקוח RESTClient = חדש RESTClient ("// postman-echo.com") def path = "/ get" def תגובה נסה {response = client.get (path: path) assert response.statusCode = 200 assert response.json? .Headers ? .host == "postman-echo.com"} לתפוס (RESTClientException e) {assert e? .response? .statusCode! = 200}

5.2. הודעה

עכשיו, בוא נגיש בקשת POST לממשק ה- API של הדוור. במקביל, נעביר את פרמטרי הטופס כ- JSON:

client.defaultAcceptHeader = ContentType.JSON def path = "/ post" def params = ["foo": 1, "bar": 2] def response = client.post (path: path) {type ContentType.JSON json params} טוען response.json? .data == params 

כאן, הגדרנו את JSON ככותרת הקבלה המוגדרת כברירת מחדל.

6. אימות לשירות אתרים

עם כמות ההולכת וגדלה של שירותי אינטרנט ויישומים המתקשרים זה עם זה, מומלץ שיהיה שירות אינטרנט מאובטח.

כתוצאה, שילוב של HTTPS ומנגנון אימות כמו Basic Auth ו- OAuth חשוב.

לכן, אפליקציה חייבת לאמת את עצמה בזמן שהיא צורכת ממשק API של שירות אינטרנט.

6.1. אימות בסיסי

אנו יכולים להשתמש בדברים שכבר דנו RESTClient מעמד. בואו נשתמש ב- HTTP בסיסי אישור כיתה עם אישורים לביצוע אימות בסיסי:

def path = "/ basic-auth" client.authorization = HTTPBasicAuthorization חדש ("דוור", "סיסמה") response = client.get (path: path) assert response.statusCode == 200 assert response.json? .authenticated == נָכוֹן

לחלופין, אנו יכולים להעביר ישירות את האישורים (מקודד Base64) ב- כותרות פָּרָמֶטֶר:

def response = client .get (path: path, headers: ["Authorization": "בסיסי cG9zdG1hbjpwYXNzd29yZA =="])

6.2. OAuth 1.0

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

עם זאת, מכיוון שאין לנו תמיכה מובנית ב- OAuth 1.0 כמו במנגנונים האחרים, נצטרך לבצע את העבודה בעצמנו:

def path = "/ oauth1" def params = [oauth_consumer_key: "RKCGzna7bv9YD57c", oauth_signature_method: "HMAC-SHA1", oauth_timestamp: 1567089944, oauth_nonce: "URT7v4", oauth = kt = חדש RESTClient ("// postman-echo.com") .get (path: path, query: params) assert response.statusCode == 200 assert response.statusMessage == "OK" assert response.json.status == " לַעֲבוֹר"

7. מסקנה

במדריך זה בדקנו כמה דרכים שימושיות לעבוד עם שירותי אינטרנט בגרובי.

במקביל, ראינו דרך קלה לקרוא RSS או עדכון Atom.

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


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