PracticU

שרת HTTP שליחת פרמטרים ב-Swift-Xcode

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › שרת HTTP שליחת פרמטרים ב-Swift-Xcode
מילון מושגים:
Xcode - סביבת הפיתוח של אפל לכתיבת אפליקציות ל-iOS ול-macOS.
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.
POST - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או לעדכן משאב, למשל שליחת טופס.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
URL - הכתובת שמזהה משאב באינטרנט, למשל דף אתר, וכוללת פרוטוקול, שם מארח ונתיב.
מטמון - אחסון זמני ומהיר של נתונים שנדרשים שוב, כדי להאיץ גישה ולהפחית עומס מהמקור המקורי.
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.

שרת HTTP שליחת פרמטרים ב-Swift-Xcode
בשיעור הזה מתחילים לעבוד עם שרת חיצוני מ-Swift: בונים כתובת עם פרמטרים, שולחים בקשת HTTP עם URLSession ומעדכנים את הממשק בתשובה. הדוגמה היא API שמקבל שם פרטי ומחזיר את המגדר שלו.
מבנה בקשת HTTP
כתובת מורכבת מ-scheme (HTTP או HTTPS), authority (בדרך כלל רק ה-host, ולפעמים port), path ופרמטרי query. יש סוגי בקשות כמו GET ו-POST, ואפשר לשלוח headers (למשל לבקש תשובה בפורמט JSON) ו-body. ברוב הבקשות מספיקה כתובת עם פרמטרים.
השלבים העיקריים
1. הפרויקט: פרויקט בשם Gender API, עם תיקייה API וקובץ APIManager. ה-API דורש הרשמה וקבלת API key. ב-struct נשמרים apiKey ו-urlString (הכתובת בלי הפרמטרים).
2. הפונקציה check: מקבלת שם (name) ו-callback מסוג @escaping שמקבל String? (המגדר).
3. פרמטרים כמילון: מילון עם name ו-key. הפרמטרים של ה-API הם name ו-key.
4. המרה ל-URLQueryItem: params.map { URLQueryItem(name: $0.key, value: $0.value) } היא מקבילה לולאה שמוסיפה פריט לכל זוג. היתרון של URLQueryItem הוא קידוד אוטומטי של התווים, למשל שם בעברית שמומר לרצף תווים חוקי בכתובת. אנגלית לא משתנה.
5. הרכבת הכתובת: URLComponents(string: urlString), השמה של queryItems, ואז .url. הסדר של הפרמטרים לא משנה.
6. בקשה: URLRequest(url:). אפשר לקבוע httpMethod (ברירת המחדל GET), httpBody ו-allHTTPHeaderFields, למשל accept עם application/json, אבל ה-API הזה לא דורש זאת.
7. שליחה: URLSession.shared.dataTask(with:completionHandler:), ו-resume() להתחלת המשימה. URLSession שומר cache, ולכן חיפוש חוזר מחזיר מיד.
8. פענוח: struct בשם GenderResponse עם name, nameSanitized, country, gender, samples, accuracy, duration ו-creditsUsed. JSONDecoder עם keyDecodingStrategy = .convertFromSnakeCase. בניסוי הראשון התקבלה קריסה כי המפתח samples נכתב עם שגיאה.
9. ה-thread: dataTask רץ כבר ב-thread משני, ולכן אין צורך ב-GCD ידני, אבל עדכון הממשק, כולל קריאה ל-callback עם nil בשגיאה, חייב לרוץ ב-DispatchQueue.main.async.
10. ממשק: text field לשם, כפתור חיפוש ו-UIActivityIndicatorView (עם hidesWhenStopped) שמופעל לפני הבקשה ונעצר אחריה. בלחיצה, המגדר שחוזר מוצג בכותרת הכפתור.
בסוף השיעור אפשר לבנות כתובת עם פרמטרים, לשלוח בקשה ל-API ולהציג את התשובה בממשק.
השיעור הבא בקורס: פרוייקט מסכם ב-Xcode

פרקי ההרצאה: שרת HTTP שליחת פרמטרים ב-Swift-Xcode

  1. 00:00

    היכרות עם פרוטוקול HTTP

  2. 00:58

    החלקים של כתובת URL

  3. 02:26

    סוגי בקשות, Headers ו-Body

  4. 04:13

    הכרת Gender API

  5. 06:05

    קבלת API Key ופרויקט חדש

  6. 07:13

    struct של APIManager

  7. 08:59

    פונקציה עם callback לתוצאה

  8. 10:56

    המרת פרמטרים ל-Query Items עם map

תמלול ההרצאה: שרת HTTP שליחת פרמטרים ב-Swift-Xcode

הטקסט המלא של הדקות הראשונות בהרצאה «שרת HTTP שליחת פרמטרים ב-Swift-Xcode» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום וברוכים הבאים, אנחנו רוצים להתחיל לעבוד עם שרתים מרוחקים ולעבוד עם בעצם אתרים שנותנים לנו מידע מ-HTTP או HTTP Secure.

  2. 00:13

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

  3. 00:35

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

  4. 01:06

    של דבר בקשות טקסטואליות, זאת אומרת יש לנו פה את המבנה של בקשת ה-HTTP כלשהי, והם מסבירים לנו פה את החלקים, כדאי להסתכל על החלקים לפחות, אנחנו יכולים לראות שהסכמה נקראת ה-HTTP, אנחנו יכולים לראות שכל הדבר הזה נקרא אוטוריטי, שהאוטוריטי מורכב מ-user info ו-host,

  5. 01:26

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

  6. 01:50

    אתם תרצו לציין את הנתיב לאן אתם הולכים, אז אם נגיד אתם הולכים ל-example.com, בתוך זה אתם תרצו ללכת לאיזשהו נתיב שנקרא slash forums/שאלות, ואחר כך, אתם תוכלו בצורה אופציונלית גם להעביר פרמטרים, להעביר query parameters.

  7. 02:06

    בסופו של דבר, יש פה גם איזשהו פרגמנט עבור ה-ID, אבל זה לא ישמש אותנו בדוגמאות שלנו. אנחנו נרצה להכיר כאן את החלק הזה של הפרמטרים, של ה-query parameters, אנחנו נרצה לדעת שיש את ה-host, בסדר? ואנחנו נרצה גם להעביר איזשהו פאפ ל-API שאני רוצה לעבוד איתו.

  8. 02:24

    יש את הכתובת אוקיי ואנחנו נצטרך לעבוד על הכתובת במיוחד איך להעביר לתוך הכתובת פרמטרים זה דבר ראשון דבר שני שאנחנו רוצים לדעת על בקשות http זה שהם קודם כל יש מספר בקשות http יש בקשות get בקשות פוסט בקשות update delete וכן הלאה ובנוסף ברגע שאתם שולחים בקשת http אז בקשת http מורכבת

  9. 02:37

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

  10. 03:12

    לרוב הבקשות שלנו יסתדרו יפה מאוד עם פשוט לתת את ה-URL, אבל בתוך ה-URL אנחנו נרצה לשרשר את ה-Query Parameters, ומדי פעם אנחנו נצטרך להעביר לבקשה גם דברים כאלה שנקראים headers או request body תלוי ב-API אוקיי קצת תיאוריה פה אני יודע אבל שווה ככה לעבור ולהכיר דרך אגב לגבי ההדרים שאתם יכולים להעביר אם אנחנו כבר בקטע של תיאוריה

  11. 03:41

    אז בואו נלחץ פה על הדרים שאפשר להגיד לשרת להביא לנו למשל אני יכול להגיד לשרת שאני רוצה לעבוד או לקבל מהם תשובות ב-UTF-8 אז אני יכול להגיד להם אני מעדיף לקבל תשובות ב-UTF-8 בנוסף, אנחנו יכולים להגיד שאנחנו מעדיפים לקבל תשובות בפורמט של Detect HTML או Application JSON או Application XML, כלומר, אנחנו רוצים לקבל את התשובה באיזשהו

  12. 04:03

    פורמט. בנוסף, אפשר לבקש מהשר"ט עוד כל מיני דברים מסודרים, וזה נקרא עדרים, בסדר? זאת אומרת, זה מידע נוסף שנשלח עם הבקשה, ובעדרים אתם יכולים לשלוח לו נגיד את התאריך שלכם, ואז אולי הוא יוכל להתאים לכם את המידע עבור התאריך הזה, וכך הלאה.

  13. 04:22

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

  14. 04:35

    אנחנו ניכנס ל-genderapi.com, אתם תצטרכו לעשות sign up for free, בסדר? כדי להיות מסוגלים להשתמש ב-API, ומה שה-API נותן לכם, אתם מכניסים שם ומקבלים ג'נדר.

  15. 04:49

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

  16. 05:16

    בתוך הג'ייסון אוקיי עכשיו איך אנחנו משתמשים בAPI אז יש לנו פה כתובת נכון ואפשר להעביר לכתובת הזאת כל מיני פרמטרים למשל name שווה Elizabeth and key שווה your key בואו נקפוץ רגע לAPI docs כאן יש לנו דוגמא קצת יותר קלה להבנה רוצים שנעשה בקשת HTTP מסוג get הכתובת תהיה הכתובת הבאה וברגע שזה יהיה הפאפ דרך

  17. 05:45

    אגב זה יהיה אוטוריטי זה יהיה הפרוטוקול וברגע שאנחנו נגיע פה לנתיב הבא אנחנו נצטרך להעביר שתי פרמטרים א' את השם אפשר גם להעביר country אם רוצים אבל זה לא חובה ובנוסף אנחנו נצטרך להעביר גם את ה-API Key.

  18. 06:03

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

  19. 06:16

    אז כדי לקבל את ה-API Key שלנו, בואו נלך פה ל-My Account, נעשה לוגין, יש לנו פה את הדוגמה למטה שכוללת את ה-API Key, בסדר? והנה ה-API Key עצמו.

  20. 06:35

    מה שאנחנו נעשה אנחנו נעתיק רגע את זה קופי ונלך בחזרה לאקסקוד ונתחיל לעבוד אז אנחנו הולכים לאקסקוד עכשיו ופייל ניו פרויקט אנחנו נלחץ על סינגל ויו אפ ואנחנו רוצים לקרוא לדוגמה שלנו נניח ג'נדר API אוקיי עכשיו אנחנו נתקדם הלאה ונשים פרויקט חדש ונפתח את הדבר הזה בחלון מלא עכשיו בשביל לעבוד עם ה-API רצוי שיהיה לכם פה איזשהו מודלים של עבודה עם ה-APIs

  21. 07:15

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

  22. 07:43

    אוקיי, עכשיו, בקובץ שלנו אנחנו נרצה בעצם לייצר לעצמנו איזשהו Structure ל-API Manager שאיתו נעבוד.

  23. 07:58

    יהיו לנו פה שדות כמו private let api-key ובוא נשמור פה אולי גם את הכתובת שקיבלנו אז נדביק פה את הכתובת אני אגזור מהכתובת אני מה שאנחנו נעשה הוא נעתיק רגע את כל זה שעדיין יהיה לנו בקופי פייסט בקליפ בורד אבל אנחנו נשאיר רק את ה-api-key בצורה הזאת מעבר ל-api-key אנחנו נרצה לשמור לעצמנו גם את ה-url סטרינג אז private let url סטרינג ובוא נדביק פה את כל הדבר הזה רק בלי הסימן שאלה והפרמטרים כי אותם אנחנו נרצה

  24. 08:35

    להכניס בנפרד אוקיי אז יש לנו פשוט את הנתיב של האתר ויש לנו גם את ה-api-key ואנחנו זוכרים שלשתי השדות האלה אנחנו נצטרך לקרוא להם name ו-key אוקיי זה יהיה ה-key בהשרת שלהם וזה יהיה ה-name ואתם יודעים מה כדאי לכם לשים פה הערה גם עם כל הכתובת כמו שהייתה קודם כדי שתדעו בסוף בסוף מה צריך לצאת לכם אז יופי, זה הסטרקצ'ר שלי, עכשיו בואו נייצר

  25. 09:04

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

  26. 09:38

    שאלה עבור אג'נדר ולא מחזיר ערך אוקיי אז אנחנו נרצה לקבל שם ובקולבק לענות מה יהיה האג'נדר אוקיי זה יהיה האג'נדר שיתקבל כתוצאה מהשאלות יפה עכשיו פרמטרים שאנחנו רוצים להעביר בוא נגיד שנגדיר אותם כרגע כדיקשונרי הסיבה שאני מגדיר אותם כדיקשונרי היא שבהרבה API הרבה סליחה דוגמאות בסוויפט

  27. 10:08

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

  28. 10:33

    רוצים לעבור מה שכן הפרמטרים אז קראנו לזה params הם יהיו name וב-name אנחנו ניתן את ה-name שקיבלנו פה בפרמטר למעלה ואחרי ה-name יש לנו גם את ה-key נכון את ה-api key אז ה-api key בואו נכניס אותו גם כן פנימה פה פשוט נכניס את self.api.key טוב אז בעצם יצרנו dictionary מהפרמטרים שאנחנו צריכים לעבור להעביר ל-API נכון מהדברים האלה name שווה

  29. 11:02

    אליזבת ו-key שווה ה-key שלנו אבל זה בתור dictionary כדי להמיר את זה לסוויפט בעצם אנחנו נרצה להשתמש ב-query items אוקיי אז בואו נראה מה זה אומר בעצם אנחנו נעשה דבר כזה אנחנו נרוץ על כל הפרמטרים שקיבלנו ונמיר אותם ל-query items כדי לעשות את זה אז let queryItems items שווה ובעצם אנחנו

  30. 11:29

    רוצים לקחת את הפראמס את הדיקשנרי ולהמיר אותו למערך בעצם של queryItems כדי לעשות את זה אנחנו פשוט אומרים params.map ואנחנו ניתן לו פונקציה טרנספורמציה שתיקח צמד של key value ותכניס לי את זה בתור queryItem בתור מופע של queryItem בואו נעשה את זה בדרך הפשוטה ואחר כך אני אראה לכם כאילו אולי את הדרך שאתם הייתם עושים את זה בה

  31. 11:56

    אז ברמס מפ, כאן אני מעביר לו פשוט את ה-query items, ה-url query item, ואני פשוט נותן לו את הבנאי של זה, אוקיי?

  32. 12:11

    עכשיו, מה אני מקבל פה בצד? אנחנו מקבלים פה מערך של url query item. אז בעצם רצתי פה על כל אחד מאלה והפכתי אותו ל-query item. בואו נראה לכם את הדרך הנאיבית לעשות את זה.

  33. 12:24

    אולי אתם לא הייתם מן הסתם עולים על השיטה הזאת בעצמכם, אז בואו נראה מה זה בעצם עושה. זה די מקביל ליצר מערך var arr שווה מערך חדש של query items url query items אוקיי מערך חדש ואז לרוץ על הדיקשנר הזה של הפראמס key value 11 for נגיד key.val in הדיקשנרי של הפרמטרים ולהכניס לתוך המערך query item חדש url query item חדש ואנחנו מעבירים לו name

  34. 13:03

    וvalue אז זה בעצם ה-Key וה-Value מלמעלה. כמו שאתם שמים לב זה קצת ארוך, נכון? עשיתי את זה קודם בדיוק בדיוק את אותה פעולה אבל בשורה אחת אני בעצם אומר אני רוצה למפות וזאת בעצם Higher Order Function Map, אוקיי? אני רוצה להשתמש בפונקציה Map שמה שהיא יודעת לעשות היא יודעת לרוץ על כל ה-Dictionary

  35. 13:20

    איזה Key Value Pair ולעשות איתו משהו. אז מה שאמרתי לה זה שתיקחי את הבנאי של URL Query Item ועבור ה-Name תכניסי את הפרמטר הראשון, את ה-Key ועבור ה-Value תכניסי את הפרמטר השנית הvalue וכל הדבר הזה זה בעצם בדיוק עלולה פה שכתובה למטה מדהים אוקיי עכשיו אולי אתם שואלים את עצמכם למה אני צריך להשתמש

  36. 13:45

    ב query items בכלל אז query items עושים בשבילנו עבודה מאוד מאוד נחמדה וחשובה והם לוקחים בשבילנו את מה שכתוב פה למעלה את הapi key אבל גם את הname והם יודעים לקחת אותו

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: סמפור ונעילות - Locks and Semaphores

ההרצאה הבאה: פרוייקט מסכם ב-Xcode

הרצאות קשורות מקורסים אחרים

  • שליחת פרמטרים לראוטינג - ריאקט
  • מבנה של שרת Web / HTTP
  • שליחת email
  • פרוטוקול HTTP

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון