בדוק REST API עם תלתל

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

מדריך זה נותן סקירה קצרה על בדיקת REST API באמצעות סִלְסוּל.

סִלְסוּל הוא כלי שורת פקודה להעברת נתונים ותומך בכ 22 פרוטוקולים כולל HTTP. שילוב זה הופך אותו לכלי אד-הוק טוב מאוד לבדיקת שירותי ה- REST שלנו.

2. אפשרויות שורת פקודה

curl תומך בלמעלה מ- 200 אפשרויות שורת פקודה. ויכול להיות שאפס או יותר מהם ילוו את כתובת האתר בפקודה.

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

2.1. מִלוּלִי

כשאנחנו בודקים, מומלץ להפעיל את המצב המילולי:

תלתל -v //www.example.com/

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

2.2. תְפוּקָה

כברירת מחדל, תלתל פלט את גוף התגובה לפלט רגיל. לחלופין, אנו יכולים לספק את אפשרות הפלט לשמירה בקובץ:

סלסול -o out.json //www.example.com/index.html

זה מועיל במיוחד כאשר גודל התגובה גדול.

3. שיטות HTTP עם סלסול

כל בקשת HTTP מכילה שיטה. השיטות הנפוצות ביותר הן GET, POST, PUT ו- DELETE.

3.1. לקבל

זוהי שיטת ברירת המחדל בעת ביצוע שיחות HTTP עם סלסול. למעשה, הדוגמאות שהוצגו בעבר היו שיחות GET רגילות.

בעת הפעלת מופע מקומי של שירות בנמל 8082, נשתמש במשהו דומה לפקודה זו כדי לבצע שיחת GET:

תלתל -v // localhost: 8082 / אביב-מנוחה / foos / 9

ומכיוון שהמצב המילולי פועל, נקבל מידע נוסף יחד עם גוף התגובה:

* מנסה :: 1 ... * הגדר TCP_NODELAY * מחובר ליציאת 8080 של localhost (:: 1) (# 0)> GET / spring-rest / foos / 9 HTTP / 1.1> Host: localhost: 8082> User-Agent: תלתל / 7.60.0> קבל: * / *> <HTTP / 1.1 200 <X-Application-Context: application: 8082 <Content Type: application / json; charset = UTF-8 <Transfer-Encoding: chunked <Date: א ', 15 ביולי 2018 11:55:26 GMT <{"id": 9, "name": "TuwJ"} * חיבור מס' 0 לאירוח המארח המקומי נותר ללא פגע

3.2. הודעה

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

הדרך הפשוטה ביותר לעשות זאת היא הטמעת הנתונים בפקודה:

תלתל -d 'id = 9 & name = baeldung' // localhost: 8082 / spring-rest / foos / new

או העביר קובץ המכיל את גוף הבקשה לאפשרות הנתונים כך:

curl -d @ request.json -H "סוג תוכן: יישום / json" // localhost: 8082 / spring-rest / foos / new

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

{"חותמת זמן": "15-07-2018 05:57", "status": 415, "error": "סוג מדיה לא נתמך", "חריג": "org.springframework.web.HttpMediaTypeNotSupportedException", "הודעה": "סוג תוכן 'יישום / x-www-form-urlencoded; charset = UTF-8' לא נתמך", "path": "/ spring-rest / foos / new"}

הסיבה לכך היא שתלתל מוסיף את כותרת ברירת המחדל הבאה לכל בקשות ה- POST:

סוג תוכן: יישום / x-www-form-urlencoded

זה גם מה שהדפדפנים משתמשים בפוסט רגיל. בשימוש שלנו, בדרך כלל נרצה להתאים אישית את הכותרות בהתאם לצרכים שלנו.

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

תלתל -d '{"id": 9, "name": "baeldung"}' -H 'סוג תוכן: יישום / json' // localhost: 8082 / spring-rest / foos / new

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

כתוצאה מכך, נצטרך להחליף את הציטוטים היחידים במרכאות כפולות; לברוח מהם בכל מקום שצריך:

תלתל -d "{\" id \ ": 9, \" name \ ": \" baeldung \ "}" -H "סוג תוכן: יישום / json" // localhost: 8082 / spring-rest / foos / new

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

3.3. לָשִׂים

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

ללא איזכור של סוג שיטת בקשה, תלתל מוגדר כברירת מחדל לשימוש ב- GET. לכן אנו מזכירים במפורש את סוג השיטה במקרה של PUT:

תלתל -d @ request.json -H 'סוג תוכן: יישום / json' -X PUT // localhost: 8082 / spring-rest / foos / 9

3.4. לִמְחוֹק

שוב, אנו מציינים שאנחנו רוצים להשתמש ב- DELETE באמצעות האפשרות -X:

תלתל -X DELETE // localhost: 8082 / spring-rest / foos / 9

4. כותרות בהתאמה אישית

אנו יכולים להחליף את כותרות ברירת המחדל או להוסיף כותרות משלנו.

לדוגמה, כדי לשנות את כותרת המארח, אנו עושים זאת:

תלתל -H "מארח: com.baeldung" //example.com/

כדי לכבות את כותרת User-Agent, אנו מכניסים ערך ריק:

תלתל -H "סוכן משתמש:" //example.com/

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

curl -d @ request.json -H "סוג תוכן: יישום / json" -H "קבל: יישום / json" // localhost: 8082 / אביב-מנוחה / foos / חדש

5. אימות

שירות הדורש אימות ישלח בחזרה קוד תגובה 401 - HTTP לא מורשה וכותרת WWW-Authenticate משויכת.

לצורך אימות בסיסי, אנו יכולים פשוט הטמע את שילוב שם המשתמש והסיסמה בתוך בקשתנו באמצעות אפשרות המשתמש:

curl --user baeldung: secretPassword //example.com/

עם זאת, אם ברצוננו להשתמש ב- OAuth2 לצורך אימות, נצטרך לקבל את access_token משירות ההרשאה שלנו.

תגובת השירות תכלול את אסימון גישה:

{"access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3", "token_type": "bearer", "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91", "expires_in": 31234}

כעת נוכל להשתמש באסימון בכותרת ההרשאה שלנו:

תלתל -H "אישור: נושא b1094abc0-54a4-3eab-7213-877142c33fh3" //example.com/

6. מסקנה

בדקנו להשתמש בפונקציונליות המינימלית של תלתל כדי לבדוק את שירותי ה- REST שלנו. למרות שזה יכול לעשות הרבה יותר ממה שנדון כאן, לענייננו, זה צריך להספיק.

אל תהסס להקליד curl -h בשורת הפקודה כדי לבדוק את כל האפשרויות הזמינות. שירות ה- REST המשמש להפגנה זמין כאן ב- GitHub.