[Powered by Google Translate] [סמינר] [המבוא של מתכנת לAPIs]
[בילי Janitsch] [אוניברסיטת הרווארד] [טומי MacWilliam]
[זה CS50.] [CS50.TV]
>> היי, כולם, אני בילי, והיום אני הולך לדבר על API,
או ממשקי תכנות יישומים,
במיוחד בהקשר של CS50 עבודות גמר ודברים מהסוג הזה.
באופן כללי מה הוא API?
במובן רחב ביותר, זה סוג של אדם באמצע שמאפשר 2 חתיכות
של תוכנה כדי לתקשר אחד עם השני.
זה סוג של הגדרה רחבה מאוד והוא לא כל כך רלוונטי למה שאנחנו מסתכלים.
מה שאנחנו באמת רוצים הוא איזשהו אמצע קרקע שימושית
כדי לתקשר עם איזה מסד נתונים כלשהו.
>> הנה תרשים, ובעצם הרעיון הוא ש
אנחנו יישום, ואנחנו רוצים לקבל נתונים מבסיס נתונים,
אבל אנחנו לא רוצים לתשאל את מסד הנתונים באופן ישיר.
במקום שאנחנו רוצים לעבור את זה סוג של איש באמצע, ה-API.
הרעיון מאחורי זה הוא מספרים 2 ו 3 בתרשים
שניהם הולכים להיות מאוד מסובך ומבולגן.
במילים אחרות, כאשר ה-API היא שאילתא מסד הנתונים,
זה כנראה הולך להיות באמצעות טבלאות SQL וכל דברים מהסוג הזה,
ולמדנו קצת על זה בCS50, אבל בסך הכל,
שמתם לב שזה קצת כאב.
זה נהיה מאוד מאוד מסובך ומבולגן, במיוחד כאשר אתה עושה
שאילתות מורכבות ודברים מסוג זה.
>> מה שאנחנו באמת רוצים הוא איזושהי דרך יעילה ופשוטה
כדי לקבל את הנתונים, וזה הרעיון שעומד מאחורי המספרים 1 ו 4 בתרשים.
במילים אחרות, אנחנו רוצים באמת דרך פשוטה להגיד לי API מה להביא לנו
ודרך ממש פשוטה כדי לקבל את הנתונים בחזרה.
יש דרך מרכזית אחת שנתונים אלה בדרך כלל שלחו וקבלו,
אשר JSON, או סימון אובייקט JavaScript.
זה יכול להשתנות מעט ככל איך אתה שולח בקשה ל-API.
במילים אחרות, אם אתה רוצה קצת כמות מסוימת של נתונים,
איך אתה אומר API כדי לקבל נתונים יכולים להשתנות מעט.
בדרך כלל זה כרוך בעשייה כלשהי בקשת רשת.
במילים אחרות, גישה לסוג מסוים של כתובת אתר שעומד לספר API
בדיוק מה שאתה רוצה, אבל את הנתונים כמעט תמיד נשלחו בחזרה,
במילים אחרות, מספר 4 בJSON.
>> מה JSON בדיוק?
כפי שאמרתי, סימון אובייקט JavaScript.
זה בעצם התקן האוניברסלי להעברה וקבלת נתונים.
הרעיון הוא שיש לך 3 קטגוריות אלה של דברים.
יש לך מערכים, hashmaps ופרימיטיבים.
מערכים וhashmaps שבדקתם קצת בCS50,
אבל אתה סוג של קבלת תחושה מאוד קפדנית של מה שהם.
במילים אחרות, עם מערכים שאתה יודע שהם מקלידים מאוגדים,
אז יש לך סוג אחד של סוג שהולך לאורך כל המערך בלבד.
JSON הוא הרבה יותר קל עם דברים מהסוג הזה.
בעיקרון הרעיון הוא שאתה בונה אובייקט זה,
שיכול להיות מורכב מכל אחד מהדברים האלה 3
ויכול להיות מורכב מאלה מרובים שלהם, והם יכולים להיות מקוננים.
>> הסוג של כאן בדוגמה של JSON,
אשר הסוגריים המסולסלים האלה כאן מייצגים HashMap,
וHashMap הוא בעצם מיפוי מסוג כלשהו של מפתח
לאיזשהו ערך.
אתה רואה כאן שיש לנו את מפתח הנכסים,
וזה מיפוי גבי מערך, שכל העניין הזה.
אנו רואים אלמנט נוסף HashMap, שהוא isAwesome מפתח זה,
שהמפות לערך ראשוני של אמיתי, ובמילים אחרות, בוליאני.
הפרימיטיבים יכולים להיות מחרוזות. הם יכולים להיות שלמים.
הם יכולים להיות bools, משהו כזה.
ואתה רואה את התוכן של מערך זה שנקודתי מאפיינים ליש 2 מחרוזות בזה,
עצמי דומה ונפלא.
אלה 2 מאפיינים של JSON, ואנו רואים שJSON הוא מדהים.
להסתכל על זה קצת יותר לעומק אני הולך לבנות
דוגמה מורכבת יותר של JSON כאן.
>> בואו נתחיל עם מערך, למשל, פשוט מערך ריק.
אבל זה סוג של משעמם, אז אנחנו הולכים למלא אותו קצת,
וכפי שאמרתי, במערכי JSON הם סוג כריכה,
כך אנחנו גם יכולים להיות מחרוזת כאן, שהוא היי,
וזה אלמנט נוסף שהמערך.
וכמו כן, אנו יכולים להוסיף hashmapping כאן, שהוא הולך להיות כמה מיפויים.
זה הולך להיות מיפוי משם למחרוזת בילי.
יש לנו מיפוי משם לבילי, ויש לנו מיפוי של
הצבע אהוב לכחול.
זה בעצם דוגמה טובה לJSON.
זה סוג של מקבל לתוך-אופס, צריך פסיק שם, על כל חלקיו השונים שלו.
שוב, זה לא קשור בכלל להקליד, כך שאתה יכול להיות כל סוג של סוגים
בתוך מה שאתה רוצה, והרעיון הוא שזה עצמי דומה.
במילים אחרות, עכשיו זה משהו שאובייקט JSON, כפי שהוא כל העניין הזה,
כהוא בדיוק זה, כך שאתה יכול להיות פרימיטיבי להיות אובייקט,
מערך להיות אובייקט או HashMap להיות אובייקט.
>> כפי שאתה יכול לראות סוג של, JSON הוא ממש ממש שימושי בכך שהוא כל כך מגוון.
אתה יכול לקבל את כל נתונים אפשריים שניתן להעלות על דעת שמאוחסנת בJSON.
זה הופך אותו לשפה באמת נחמדה להשתמש עם APIs
כי זה פחות או יותר אומר שלא משנה מה נתונים שאתה רוצה
יש הולך להיות איזו דרך לקבל אותו בחזרה בJSON.
כמה מאפיינים שהופכים את JSON טוב במיוחד לדברים מהסוג הזה.
כפי שניתן לראות, בהשוואה להרבה דברים שאתה כבר עובד עם בCS50
זה יחסית מאוד קל לקריאה וגם קל מאוד לכתוב.
אתה יכול לשנן את זה אם אתה רוצה, כמו שאני עושה שבדוגמה,
אשר נותן לך גרסה נחמדה, יפה שאתה יכול לראות ממש טוב.
אבל מעבר לכך, זה גם קל לקריאה וכתיבה למחשב.
במילים אחרות, זה קל לנתח וקל לקידוד,
מה שאומר שזה די מהר ככל שקרא את הנתונים הוא מודאג,
וJSON יכול להיות שנוצר ממש במהירות.
>> זה גם מאוד קל לגשת לחלקים שונים של JSON ודברים מסוג זה.
זה נחמד, ויתר על כן, עובדה שזה עצמי דומה,
במילים אחרות, העובדה שאתה יכול להיות בתוך JSON JSON בתוך JSON
ממש נחמד לאחסון נתונים.
חלק אחר שהוא בדרך כלל באמת שימושי בעבודה עם ממשקי API הוא jQuery.
אתה למדת קצת JavaScript, שהיא דרך נחמדה
כדי לתפעל HTML ו-CSS בתוך אתר.
אבל זה יכול להיות סוג של כאב לקוד ב-JavaScript הרגיל,
בעיקר בגלל JavaScript היא באמת שפה מפורטת.
אתה צריך ללמוד הרבה תחביר, ורק כדי לעשות את דברים פשוטים מאוד
זה לוקח הרבה קוד, כך jQuery היא ספריית JavaScript.
במילים אחרות, זה קובץ JavaScript שאתה יכול לטעון
ולאחר מכן להשתמש בפונקציות jQuery לעשות דברים מסוימים.
וjQuery בעצם עושה את החיים הרבה יותר קלים.
זה מפשט את מה שהייתה מוריד מאה קווים ב-JavaScript לכמה שורות בjQuery.
>> זה שימושי במיוחד אם אתה משתמש בממשקי API כי בדרך כלל
איך אתה תהיה גישה לממשקי API היא על ידי הגשת בקשות AJAX,
ואני מאמין שדוד לא הזכיר בהרצאה שבקשות AJAX
בדרך כלל כשאתה עושה בקשת רשת לאיזשהו שרת
ומקבל בחזרה איזה נתונים ועדכון דף באופן מיידי.
ואילו במישור JavaScript שייקח את המספרים מטורפים של קווים
כדי לאמת את כל הכותרות ולעשות את כל דברים מהסוג הזה,
jQuery יש תפקיד באמת פשוט שנקרא AJAX,
וכל מה שאתה צריך לעשות הוא לתת בAJAX הפרמטרים שברצונך לתת API,
מיקומו של ה-API וכל סוג נוסף של אפשרויות שברצונך להגדיר.
זה באמת, באמת נחמד ושימושי מאוד לדברים מהסוג הזה.
זה כל מה שאנחנו צריכים כדי להתחיל לקבל את ידינו מלוכלכות בממשקי API.
>> אני הולך להעלות כמה דוגמאות ולחקור את המאפיינים השונים שלהם
ומדוע הם שימושיים עבור סוגים שונים של דברים.
הדבר הראשון שאני ממש אראה לך משהו שאני עובד על
במעבדת המחקר שלי, שהוא מציג Ngram,
ובעצם הרעיון של מציג Ngram הוא שאתה יכול לחפש איזה מילה
או ביטוי ולראות כמה פעמים הוא הופיע בקבוצה מסוימת של טקסט לאורך זמן.
דוגמה זו הנה מערך נתונים זה של תינוקות
שנולדו בניו יורק בין שנתי 1920 ו 2000.
אנחנו יכולים לחפש, למשל, לשם ג'ניפר,
ואנחנו רואים ש-1960 מראש זה באמת לא היה בשימוש כל כך הרבה,
ואז כמו שאנחנו נכנסים לשנים מאוחרות יותר זה הופך להיות נפוץ יותר ויותר.
אנחנו גם יכולים לעשות השוואות, אז אם נשווה לג'ניפר, למשל, תומס,
אנו יכולים לראות תומאס כבר די נפוץ בהיסטוריה,
בעוד ג'ניפר הוא שם חדש יותר.
אנחנו יכולים לעשות דברים מסוג הזה.
>> איך זה עובד בקשה?
בעיקרון, זה עובד דרך ה-API.
במילים אחרות, יש לנו פרמטרים מסוימים כאן.
יש לנו את הפרמטרים של מה שאנחנו מחפשים בעצם ל,
שהם השמות האלה, ואז יש לנו כמה מאפיינים אחרים,
כמו ציר Y וציר X.
אתה יכול לראות שיש לנו כמה אפשרויות שונות ככל
רזולוצית זמן לשימוש ודברים מהסוג הזה.
יש לנו אפשרויות אלה ככל מה שאנחנו באמת רוצים נתונים מבסיס הנתונים,
ואנחנו רוצים לקבל את הנתונים חזרה בדרך מועילה.
בדרך כלל, אם היינו שאילתות בבסיס הנתונים ישירות זה היה כאילו להיות כאב לעשות
מפני שלכאורה נתונים אלה על שמות תינוק חיו במסד נתונים באיזה מקום,
וזה יהיה ממש מסובך לצריך שאילתא אותה באופן ידני
ולהחליט בדיוק אילו נתונים לחזור.
במילים אחרות, שאכפת לנו רק על ג'ניפר ותומס במקרה זה,
ואנחנו דואגים רק על ציר מסוים וכל דברים מהסוג הזה.
>> איך לעקוף את זה?
לחפור לתוך API זה קצת יותר אני אראה לך דוגמה נוספת לפלטפורמה זו
אשר משתמש בערכת נתונים מעט שונה.
מערך נתונים זה, במקום להיות שמות של תינוקות, הוא למעשה רק כולו
להדפיס נתוני פרסום של הספרייה פתוחה,
שהוא מקור ענק של טקסטים פורסמו במשך 100 או כך השנים האחרונות.
הרעיון הוא שיש לנו זה compository של מיליון ומ' של טקסט,
שאנו יכולים כעת לחפש מילים וביטויים שונים פנימה
הנה דוגמה שמשתנית באופן מעט שונה מהדוגמא הקודמת
הראיתי לך, שהוא יש לנו 3 שאילתות החיפוש הללו,
מלחמה, מלחמה, והמילה הצרפתית למלחמה, שהוא הכינוי.
ואנחנו מחפשים בתוך 3 חלקים שונים של מסד הנתונים המוחלטים.
במילים אחרות, בשאילתא הראשונה זה אנחנו מחפשים רק בארה"ב,
בשניית אחת רק בבריטניה, ורק שליש מעבודות שפורסמו בצרפת.
אנו רואים כמה דפוסים מעניינים לצוץ.
לדוגמה, אנו רואים ממש בסביבה ש-
אופס, פשלתי ציר קצת, אבל אתה יכול לראות בטווח זה כאן
סביב מלחמת האזרחים יש זינוק גדול במהדורה האמריקנית
אבל לא ספייק כזה גדול בשתיים אחרים, וברור שזה בגלל
מלחמת האזרחים האמריקנית הייתה קורית באותו רגע.
>> אנו יכולים לראות כמה דברים מגניבים שם,
אבל מה אנחנו באמת אכפת לי הוא איך הגענו לנתונים אלה.
אני אקח אותך מאחורי הקלעים ביישום זה בקצת.
טריק הוא שאם אתה עובד עם האתר וסוג של רוצה לדעת
מה קורה מאחורי הקלעים, אתה יכול לפתוח את כלי פיתוח.
אני הולך להיות באמצעות כלי הפיתוח של הכרום, וכדי להגיע לאלה
אתה יכול לעשות שליטה, משמרת, J, ושלוקח אותך לקונסולת JavaScript.
יש כמה לשוניות כאן.
כולם יכולים להיות די שימושיים בנסיבות שונות, אבל אכפת לי מהרשת
כרטיסייה עכשיו, ואני באמת צריך לרענן כדי לקבל עבודה ש.
אה, סליחה.
הוא אוהב לתת דוגמה אקראית.
אוקיי, אנו נשתמש בדוגמה זו במקום אז.
>> הרעיון הוא שיש API זה כאן,
ואתה יכול לראות בדיוק מה API חוזר.
זה מה שהוא מקבל בחזרה הבקשה מ-API שנשלח שבקשה.
בואו להגדיל אותי בקצת,
ואנחנו בעצם רואים זה רק סדרה של זוגות ערך המרכזיים בJSON.
במילים אחרות, יש לנו HashMap זה כאן הוא שממפה ערכים.
במילים אחרות, זה מיפוי שנים לערכים.
בשנת 1765 כל מילה שאנו בתחילה חפשנו משמש 90 פעמים
מתוך 1 מיליון דולרים, כך שאנחנו מקבלים בחזרה את התוצאה הזאת.
זה לא בדיוק JSON מאז יש לנו כותרת התוצאה הקטנה הזה,
אבל שים לב שכל האובייקט הזה כאן הוא רק כתם גדול גדול JSON.
יש לנו כאן מערך המכיל את כל האלמנט הזה,
ואתה יכול לראות שכל האלמנט מסתיים שם, ואז יש לנו עוד אלמנט גדול
שהולך כל הדרך למטה עד הסוף, ושמסתיים כאן.
יש לנו מגוון גדול מאוד עם 2 חפצים שבו,
וכל אחד מאובייקטים אלה הוא HashMap.
אתה יכול לראות בכל אחד מאלה יש לנו hashmaps מיפוי
ערך זה מדד 0 וערכו של ערך זה לHashMap אחר,
ששוב הוא מיפוי ערכי ציר X לערכי ציר Y.
>> אתה יכול לראות JSON מקבל קצת מסובך, אבל בסך הכל,
זה דווקא שימושי מאוד, וזה מאוד נוח לגישה, לעומת
צורות שונות אחרות של סימון.
ככל מה שאנחנו שולחים למעשה נתונים לAPI כדי לקבל,
אני מתכוון ללכת לקצה האחורי קצת כאן.
זה הקובץ הגדול JavaScript שמתעסק בכל האינטראקציות של Web App,
וכל כך לא אכפת לנו על רוב זה, אבל אכפת לנו מזה קצת.
לדוגמה, אנו דואגים לתפקוד buildQuery זה,
והרעיון של פונקציה זו הוא בעצם זה מסתכל סביב העמוד,
להבין מה המשתמש רוצה לבצע שאילתא, במילים אחרות,
בדיקת התיבות האלה שבם יש הזנת מונחי החיפוש שלו,
בדיקת ערכי ציר X שהם בחרו וכל דברים מסוג זה Y והשונה,
וזה הולך לו לפלוט את הערך הזה בשאילתה, אשר אז יכול לשלוח ל- API.
>> זה נראה מורכב, וזה די מסובך
אבל מה שאני מתכוון לעשות, למעשה, אני כבר עושה את זה, שהוא גדול,
הוא שאני הולך לקבל את הקונסולה להדפיס בדיוק שערך שאילתא
שזה לשלוח אותו ל- API.
זה ממש כאן. מצטער, זה פלטים הרבה דברים.
אבל זה מה שאכפת לנו, זה אובייקט ממש כאן.
זהו אובייקט השאילתה.
במילים אחרות, זה בדיוק מה שיישום האינטרנט שולח לAPI,
ולכן בואו נסתכל פנימה קצת, ואנחנו רואים שיש לנו כאן כמה ערכים.
אנו רואים שיש לנו סוג ספירה זו, שהיא מופעים למ' מילים,
וזה בדיוק מה שבחרנו בציר Y לכאן.
זה המקום שבי שבא.
יש לנו ערך מסד נתונים, מה שאומר שיש איזה אתר מסוים
שנתונים אלה הם חיו ב, ואנחנו רוצים לגשת לנתונים ספציפיים
בניגוד לנתוני שמות לתינוקות, למשל.
אז יש לנו ערך קבוצות זה,
וזה אומר שאנחנו רוצים לחפש לפי שנה לעומת
כל ערך ציר X אחר.
אז יש לנו שיטה, שחלק APIs יעשה דברים מרובים.
במילים אחרות, ב-API זה יכול גם לחזור סוגים אחרים של נתונים,
אבל במקרה הזה, אנחנו רוצים שמיפוי של ערכי ציר X לערכי ציר Y.
זה מה שאומר לו מה לעשות שם,
ויש לנו מערך חיפוש זה גבולות, המכיל 2 ערכים.
הראשון הוא מה שאנחנו רואים כאן, שהוא כל הערכים
שמסתתרים בתוך התיבה הקטנה הראשונה בראש.
>> במילים אחרות, אנחנו רוצים לחפש מילת הקרב, ואנחנו רוצים לסנן אותה
בטקסטים באנגלית בתוך ספרות אמריקנית.
יש לנו את הארץ הזאת, שהיא ארה"ב.
יש לנו שפה, שהיא אנגלית, אז יש לנו את כל החלקים השונים האלה
שכולם אומרים לי API בדיוק מה שאנחנו רוצים.
אנחנו לא יודעים מה הנתונים שאנחנו מקבלים בחזרה הם עדיין,
אבל אנחנו יודעים שהנתונים הולכים בצורה מסוימת.
דוגמה זו היא סוג של בצד המסובך,
ולך לא בהכרח יהיה באמצעות API מורכב זו,
אבל זה כדי להראות לך את הטווח והעצמה של מה APIs יכול לעשות.
במילים אחרות, באמצעות מערכת שאילתא פשוטה יחסית שבעצם יש תיבת קלט
עם כמה בוררים אחרים במקומות שונים.
>> בואו להגדיל אותי בחזרה לכאן.
יש לנו תיבת קלט עם כמה בחירות metadata שונות,
ויש לנו בחירות ציר X ו-Y ציר.
אנחנו לא באמת צריכים שתחומים רבים,
ואנחנו יכולים לראות בקלות שאנחנו מסוגלים לבצע שאילתא איזה API
ולקבל את נתונים חזרה ולאחר מכן הכניס אותו לתוך תרשים זה,
אשר לאחר מכן הוא הולך להציג אותו בצורה יעילה.
להסתכל על דוגמה נוספת שעשוי להיות קצת יותר מוכר לחבר 'ה
אנחנו הולכים להפוך לפייסבוק.
API של פייסבוק נקרא גרף פייסבוק,
ובעצם מה שזה אומר הוא פייסבוק רואה את עצמו כאתר הזה מהסיבי
של המון חלקים שונים שכל יש להם יחסים מסוימים אחד לשני.
במילים אחרות, אני משתמש בפייסבוק, ולכן יש לי פרופיל,
ויש לי גם חברים מסוימים, וכל אחד מהם יש פרופיל,
וכל אחד מהחברים שלי יש קיר, שבו יש הערות שונות על זה,
וכל אחת מההערות האלה יש אהבות וכל דברים מהסוג הזה.
>> יש המון חלקים שונים לפייסבוק.
זה API עצום מורכב, ויש טונות שאתה יכול לעשות עם זה,
אבל זה בעצם די פשוט לשימוש.
אני מתכוון להתחיל על ידי הולך graph.facebook.com / billyjanitsch,
אשר היא שם החשבון הייחודי שלי, ושם החשבון שלך יהיה גם יהיו
איזו מילה אם בחרת את זה, או שזה יכול להיות רק מחרוזת של מספרים.
מה שאנחנו מקבלים בחזרה הוא מידע די בסיסי.
אנו רואים שיש לי שם פרטי, שהוא בילי, שם משפחה, שהוא Janitsch.
יש הפייסבוק ייחודי שיש לי.
אתה יכול לראות שאני גבר, ושיש לי הגדרת השפה שלי
לאנגלית הבריטית.
במילים אחרות, אנו רואים מידע מאוד בסיסי כאן.
זה לא יותר מדי, אבל זה נותן לנו מושג על מה שיש.
>> אנחנו יכולים לעשות את אותו דבר לדוד מלאן, למשל.
אני חושב שהשם שלו הוא dmalan.
אנו רואים הדוד מלאן יש מזהה ייחודי.
יש לו שם, שם פרטי, שם אמצעי, שם משפחה.
כמו כן, אנו רואים שהוא גבר ויש לו סט השפה שלו לאנגלית האמריקנית.
במילים אחרות, אנו רואים מידע די בסיסי כאן.
עכשיו, מה קורה אם אנחנו מנסים לבדוק משהו אחר?
בואו נגיד שאני מתעניייין במה שאהב הדוד מלאן בפייסבוק.
אני יכול לעשות / אוהבת. עכשיו אנחנו נתקלים בבעיה.
יש לנו איזה סוג של שגיאה שאומר אסימון גישה
נדרש לבקש משאב זה.
אבל אם אתה חושב על זה, זה בעצם הגיוני כי זה יהיה מוזר
אם אתה יכול לגשת לכל חלק אחד של מסד הנתונים של פייסבוק
בדיוק מסוג כלשהו של API פשוט, נכון?
במילים אחרות, ככל הנראה את המידע שלך לא ניתן לגשת על ידי כל מי שרוצה את זה.
>> שגיאה זו היא בדיוק מה שזה אומר.
APIs חלקם דורש הרשאות מסוימות כדי לגשת לנתונים שלהם.
וAPIs אפילו מתקדם יותר, כמו פייסבוק אחת,
ידרוש הרשאות מסוימות לעשות דברים מסוימים.
אני יכול לראות את המידע הבסיסי הזה על הדוד מלאן.
אני יכול לראות שהוא גבר ושהוא מתגורר בארצות הברית,
אבל אני באמת לא יכול לראות שום דבר מעבר לכך.
כדי לעקוף זאת לעת עתה, פייסבוק יש כלי הנחמד הזה
שהוא הגרף API Explorer, והרעיון של זה אתה יכול למיין של
איפור הרשאות לעצמך מבוסס על חשבונך
ולאחר מכן להציג את הדברים באופן ספציפי לחשבון שלך יכול להציג.
לדוגמה, אם אני עושה graph.facebook.com/billyjanitsch/likes-
אופס, אני מניח שאני צריך לאמת מחדש האסימון שלי כאן.
אוקיי.
אם אני עושה את זה שוב, מצוין, עכשיו אני רואה שאני מקבל את האובייקט הזה בחזרה
שאומר שאני אוהב את אטריות ברכה, שהם בקטגורית המשחקים והצעצועים.
אני אוהב סוסי ים, הנמצאים בבעלי חי הקטגוריה.
אלה הם כמו פייסבוק הממשי שלי.
הם די מביכים.
>> אבל אנחנו יכולים לראות בנתונים אלה, כולם חזרו בJSON.
זה די קריא.
במילים אחרות, יש לנו מיפוי זה של נתונים לסוג כלשהו של מערך,
וכל אחד מהרכיבים של מערך זה הוא HashMap אשר ממפה
שם כמו והקטגוריה של כמו.
כל כמו יש מזהה ייחודי.
יש כל מיני דברים שונים של מידע שאנו יכולים לקבל,
ואם אתם מעוניינים להשתמש בפייסבוק API לפרויקט גמר CS50
או לכל דבר כמו שזה בעצם די בר ביצוע.
בעצם איך לך לעקוף את דבר האימות הוא פייסבוק
משתמש במערכת הנקראת OAuth, או אימות פתוחה,
ואני לא רוצה להיכנס לזה עכשיו כי OAuth או סוג האחר
אימות נוטה להשתנות הרבה בין APIs השונה,
כדי שאוכל לבלות זמן רב הולך על כל אחד,
אבל הם בעצם די מובנים מאליו.
>> אם פייסבוק API של Google זה מאוד קריא.
יש כל מפרט.
לדוגמה, זה התיעוד של פייסבוק API,
ואתה יכול לראות שאני בדף המשתמש, כדי שאוכל ללמוד על כל סוגים השונים של דברים
שזמינים לקבל ככל נתונים
וגם את ההרשאות השונות שאני צריך כדי לגשת אליהם.
כפי שראינו, אנחנו לא צריכים את הרשאות גישה לשם או למין,
אבל מעבר לזה אנחנו צריכים את הרשאות עבור רוב הדברים.
בדף זה, או יותר נכון, אתר זה גם אומר לך איך להגיע
אסימון להיות מסוגל לאמת את עצמך.
רוב מערכות אימות להשתמש איזה אסימון
איפה אתה מקבל את הערך ייחודי זה, שהוא באמת מחרוזת ארוכה ואקראית,
ואופן שבו הם יכולים לקשר את הבקשה שאתה עושה איתך.
במילים אחרות, הם יודעים שאתה לא עושה משהו חשוד עם הנתונים שלהם.
הם יודעים בדיוק מה אתה מקבל.
הם גם יודעים שיש לך הרשאה כדי להציג את המידע.
>> אם עשית פייסבוק אפליקציה והאפליקציה שלך יש משתמשים מסוימים,
ואותם המשתמשים שאפשרו ליישום לגשת לחלקים מסוימים של הפרופיל שלהם,
אז לא משנה איזה מקש או אסימון שהאפליקציה שבאמצעות ה-API
תוכל לגשת לנתונים למשתמשים אלה.
זה אולי נשמע מסובך, אבל זה לא נורא כל כך,
ואם אתה רוצה להשתמש בפייסבוק אני מאוד ממליץ לך
לשקול שחקתי עם ה-API שלהם.
זה מאוד מגניב, ואתה יכול לעשות הרבה דברים שונים עם זה.
אם המשתמש מעניק לך הרשאות אלה אתה יכול אפילו לחזור ל-API
ואומר שאני רוצה בעצם לפרסם לקיר של המשתמש הזה, או שאני רוצה שיהיה להם לפרסם תמונה,
ובגלל זה בערוץ החדשות שלך אתה מקבל לפעמים אלה דברים מעצבנים
אמר שהחבר שלך ראה את הסרטון הזה על איזה אתר או משהו כזה מוזר.
זאת משום שהיישום הוענק גישה לפרסם על הקיר של אותו האדם.
הרעיון כללי, פייסבוק API הוא מסובך למדי, אלא גם באמת שימושי.
בהחלט שווה לבדוק אם אתה עדיין מחפש פרויקט גמר.
>> חבילה נוספת של ממשקי API שאני הולך לעבור עליו CS50 APIs.
בואו להגדיל אותי לכאן.
CS50 למעשה יש להרכיב סדרה שלמה של APIs
שאתה יכול להשתמש עבור פרויקט גמר או סתם לכל דבר שאתה עושה.
והם בעיקר הרווארד בנושא, והם משתנים מתפריט HUDS,
לדוגמה, לרווארד אירועי API זה, אשר יאפשר לך לגשת לרשימה
אירועים שונים שמתרחשים ברווארד ודברים מסוג זה.
וכדי שנוכל ללחוץ על כל אחד מאלה ולקבל מפרט עבורו,
שתוכל למצוא לכל API, והרעיון הוא
זה מאפשר לך לדעת,, מה בדיוק לבקש מ-API ואיך לבקש אותו.
במילים אחרות, אם אני רוצה את כל האירועים שקורים מחר
אז יש לי ברור שכדי לתת לו מועד שאני רוצה בתבנית מסוימת,
ו-B, הוא יגיד לי בדיוק מה הוא הולך להחזיר לי.
זה אומר שאני הולך להחזיר אותך אובייקט JSON זה,
או כמו שאתה יכול לראות, יש פורמטים שונים.
>> אתה יכול גם להחזיר את הנתונים כקובץ CSV, למשל.
אבל אתה יודע איך בדיוק נתונים שהוא הולכים להיראות כשאתה מקבל אותו בחזרה
כך שאתה יכול לצפות לעשות דברים מסוימים עם זה.
אנחנו יכולים לגלול למטה ולראות, למשל, אם ברצוננו לבצע שאילתא API
כדי לקבל לוח שנה, ואז תוכל להשתמש בכתובת אינטרנט המסוים הזה
ולתת לו פרמטרים מסוימים שהם הולכים להיות את הנתונים שאנחנו רוצים בדיוק.
וכמו כן, אם אנחנו רוצים את הנתונים בחזרה בתבנית מסוימת,
אז אנחנו יכולים לשאול אותו לפלט של נתונים בקובץ CSV,
וזה רק פרמטר נוסף שאנחנו עוברים ל-API.
המון דברים מגניבים לעשות שם.
הייתי בהחלט ממליץ לבדוק את CS50 APIs.
>> אני הולך להסתכל על ה-API מזון הרווארד זה בפרט לקצת.
דבר אחד שנועדתי למעשה הוא אתר זה הרווארד Noms,
המשתמש ב-API המזון CS50 כדי לאחזר את תפריט HUDS ליום.
ועבור אנשים בבית הספר מאריך, HUDS הוא שירות האוכל באוניברסיטת הרווארד.
מה שאתה מקבל זה דף שמכיל את כל הארוחות ליום, ולכן אנו רואים את ארוחת צהריים.
יש לנו כמה קטגוריות שונות. יש לנו את השעועית ותחנת מחיטה מלאה.
יש לנו תחנת אורז החום.
אנחנו יכולים לראות שיש לנו לבראנץ' כמה פריטי מזון אלו.
אם נלחץ עליהם, ואז אנחנו מקבלים את המידע התזונתי.
אתה רואה את זה הוא המידע התזונתי לאשכולית, במקרה שתהיתם.
וכך שוב, אנחנו הולכים להציץ לתוך הסוף יחזור לכאן קצת
ולראות מה בדיוק זה עושה כדי לקבל מידע זה.
ומתברר שבפועל לא תהיה מאוד מורכב.
קובץ זה נראה קצת מבולגן, אבל קח בחשבון שזה נמצא בטיפול של כל אתר האינטרנט,
ואם אני לגלול למטה אנו רואים פונקצית נתוני שינוי זה.
>> עכשיו, רק שיהיו ברור, זה כתוב בCoffeeScript,
שהיא שפה שאתה כנראה לא ראית בעבר.
אבל זה די קריא, אז אני אוכל להיכנס לזה כאילו זה היה pseudocode.
שנת תאריך הוא פונקציה שהולכת לקחת בערך תאריך זה,
וזה גם הולך לקחת בראשון, שלא אכפת לנו בערך באותה מידה.
אבל הדבר החשוב הוא שיש לו תאריך זה,
והתאריך שהוא היום שאנו רוצים לבקש את כל פריטי מזון ל.
ואז אתה רואה שיש לנו קצת תחביר כאן,
שבעצם ניתוח שהמועד לפורמט קריא.
במילים אחרות, ה-API דורשת את התאריך בפורמט מסוים.
אתה לא יכול סתם להגיד 16 נובמבר 2012 לספירה.
זה לא יודע מה לעשות עם זה. היא רוצה את התאריך בפורמט ספציפי.
כל מה שאנחנו עושים כאן זה נותן לו בדיוק את זה בתבנית,
שהוא ערך בשנה ולאחר מכן מקף, ערך חודש,
מקף אחר וערך התאריך.
ואנחנו גם אומרים שאנחנו רוצים את הנתונים להיות פלט בJSON.
>> עכשיו אנחנו מכינים בקשת AJAX זה, וכפי שציינתי קודם לכן,
jQuery יש פונקציה זו שימושית במיוחד AJAX שכל מה שאתה צריך לעשות הוא לציין
כמה פרמטרים כאן למטה, וזה ינתנו לך בדיוק את מה שאתה רוצה.
אנחנו מספרים לו את כתובת האתר שאנחנו רוצים זה ללכת להיא API המזון CS50 זה,
שיש לנו מהמפרט.
אנחנו אומרים שאנחנו רוצים את הנתונים בJSON וכי
אנחנו הולכים לתת לו את הנתונים שיש לנו שהוגדרו כאן.
זה היום שאנחנו רוצים את פריטי מזון ל.
ואז כל מה שאנחנו צריכים לעשות זה להגדיר איזה פונקצית הצלחה,
וזה בעצם מה שקורה כשמחזיר את נתוני API.
במילים אחרות, אנחנו כבר ארזנו את כל הפרמטרים שאנחנו רוצים,
אשר במקרה זה הוא היום שבו אנחנו רוצים את זה ואת העובדה שאנחנו רוצים אותו בJSON,
ואנחנו שלחנו אותו ל-API, אז עכשיו API אומר, בסדר,
כאן הוא הנתונים שלך, שחזרתי את זה בשבילך.
יש לנו את פונקצית ההצלחה, מה שאומר שניתן API
חוזר כמה נתונים בהצלחה, מה אנחנו עושים עם זה?
>> ומתברר שכל מה שאנחנו עושים זה לקרוא לפונקצית תפריט עדכון זה
עם כל מה שב-API, ולכן אנחנו יכולים לחפש כי
ותראה שכל מה שאנחנו עושים הוא באמצעות חבורה של תחביר החדש כאן
כדי לעדכן את ה-HTML ולהכניס נתונים חדשים.
מה זה מאפשר לו שיש לנו החיצים האלה משני הצדדים, ואנחנו יכולים ללחוץ,
ועכשיו אנחנו מסתכלים על הנתונים ליום הבא ושוב ליום המחרת,
ובכל פעם שזה עדכון שערך התאריך וביצוע שאילתא API,
מקבל בחזרה חלק מנתונים ומכניסים אותו לאתר.
שוב, אתה יכול לראות, סופר, סופר שימושי.
יישום זה לקח לי כמה שעות כדי לפרוץ יחד,
ויש לי קצת יותר ניסיון, כמובן, אך פרויקט הגמר שלך CS50
יכול להסתכל משהו דומה מאוד לזה.
>> APIs הם סופר חזקים לכמות המאמץ שהם לוקחים.
הדבר האחרון שאני הולך לעבור עליו כמה APIs באופן רחב יותר.
אני לא מצליח להגיע עד אליהם ככל מה שהם עושים באופן ספציפי,
אבל אני אתן לך מושג מה יש שם בחוץ.
2 אלה באמת שימושיים, אם אתה מתעניייין בניתוח נתונים או הדמיה
או משהו כזה, הוא Freebase וויקיפדיה.
ויקיפדיה-כנראה שכולכם יודעים, הוא אנציקלופדיה מקוונת חופשיה,
וזה בעצם יש API, כך שאם אתה רוצה, למשל,
לקבל את כל הטקסטים והמאמרים לתמנון
אתה יכול בקלות לעשות את זה.
פשוט תגידו היי, ויקיפדיה API, אני רוצה את הנתונים שהוחזרו כזה,
ואני רוצה אותו בפורמט זה, ואת המאמר שהייתי רוצה זה תמנון,
ומהר מאוד זה ייתן לך בחזרה את המידע הזה.
זה יכול להיות שימושי מאוד אם אתה רוצה לעשות איזה אתר
זה טוב יותר לצופת ויקיפדיה או משהו כזה.
>> Freebase הוא סוג של דומה, למרות שזה קצת יותר קשה ככל API.
Freebase הוא כמו ויקיפדיה שבזה אנציקלופדיה מקוונת
אשר מכיל המון המון נתונים שונים על כל מיני נושאים שונים,
אבל הוא מאוחסן במסד נתונים יחסי, שהוא מעט שונה מויקיפדיה.
ויקיפדיה יש מאמרים ומאמרים שלה הצמודים למאמרים אחרים,
אבל ברוב המקרים, אם אתה רוצה את הנתונים עבור תמנון,
אתה הולך למאמר התמנון, לקבל את הנתונים, ויש לך חבורה של טקסט
על תמנונים, אז זה נהדר.
Freebase פועל באופן מעט יותר מסובך שב
הכל קשור אחד לשני.
במילים אחרות, אם אנחנו מחפשים תמנון
אז יש לו חבורה של קטגוריות הקשורים אליו.
>> לדוגמה, זו חיה, שחיה מתחת למים,
יש לו טמפרטורת גוף מסוימת.
אני לא יודע.
וכל אחת מהקטגוריות הללו הם קישורים למקומות אחרים שבם אתה יכול ללכת
כדי לראות את הדברים באותה קטגוריה.
במילים אחרות, ערכת נתוני התמנון תכיל קישור לנתונים שנקבעו לכל בעלי החיים,
ושיאפשר לי לנוע באתר ממש במהירות.
זה יכול להיות מאוד שימושי אם אתה עושה משהו כמו השוואות.
במילים אחרות, ניתן דבר מסוים, אתה רוצה לראות
מה עוד שזה קשור לכאן ולראות מה זה לא קשור.
דברים מסוג זה. זה יכול להיות שימושי במספר הדרכים.
אם אתם מחפשים יותר אתגר ולהיות מסוגל לעשות כמה דברים מורכבים יותר
הייתי שוקל לקחת מבט Freebase-API.
אבל במידה רבה, ויקיפדיה היא מקום מאוד פשוט ללכת רחוק ככל מקבל מידע.
עוד מקום שאני אסתכל עליו Last.fm, ובעצם אני הולך לאתר
במקרה שיש אנשים שלא מכירים, אבל Last.fm הוא בעצם מוסיקה
טעמים ואתר המלצות.
אתה יכול לעשות את חשבון.
אתה יכול להתחיל להעלות מוסיקה מנגן המוזיקה שלך
לאתר האינטרנט, ובעצם הוא יתחיל לתת לך המלצות מוסיקה
על סמך מה אתה מקשיב.
>> לדוגמה, אם אתה הולך לדף הפרופיל שלך, זה שלי,
אתה יכול לראות שיש לך רשימה של הקשיב לאחרונה למסלולים.
אתה יכול לראות את האמנים אהובים כוללים, כל דברים מהסוג הזה,
ושוב, יש API גדול מאחורי Last.fm,
ואתה יכול להשתמש בו כדי לעשות המון המון דברים ממש מגניבים.
לדוגמה, אני אלך לדף של חבר שיש לו אתר אינטרנט כלי Last.fm זה.
זו בעצם פלטפורמה אחרת, המבוססת על ה-API Last.fm,
והיא עושה מספר דברים מעניינים למדי.
אם אני נכנסתי עם שם המשתמש שלי, למשל,
אני יכול לשאול אותו כדי ליצור ענן תג, למשל,
ומה שהוא הולך לעשות הוא להחזיר לי את דמותו של
כל הז'אנרים השונים ודברים מסוג זה שאני אוהב לשמוע.
איך הוא עושה את זה?
מאוד בעצם זה אומר לLast.fm API הנה זה משתמש.
אני הייתי רוצה לדעת את הז'אנר של כל שיר שאי פעם הקשיב ל,
ואתה יכול לעשות זאת על ידי ביצוע שיחת AJAX די פשוט Last.fm-API.
את יחזרו רשימה גדולה, ואז ברור שדברים אחרים כלשהו שנעשה
כדי להפוך אותה למילת ענן, אבל אתה יכול לראות כולל
זה מאוד קל לגישה וקלה מאוד לשימוש.
ממש נחמד למספר דברים.
>> אני חושב שכל העניין אני אגיד באופן כללי.
הדבר האחרון שאני אזכיר על APIs באופן כללי הוא ש
לפעמים אתה תוכל לרוץ לתוך משהו שנקרא שיעור ההגבלה,
והרעיון של שיעור המגביל הוא שאתה לא רוצה להתעלל בממשקי API.
במילים אחרות, זה ממש נחמד שהרבה האתרים האלה יש APIs
כי אתה יכול ללכת ולשימוש בחינם.
עם זאת, אם אתה עושה מיליון או מיליארדים של בקשות ליום,
לדוגמה, אם אתה תקוע בלולאה אינסופית שאין שיעור של תשאול
איזה API ומקבל בחזרה כמות עצומה של נתונים,
כמובן שזה לא טוב, אז מה הרבה APIs לעשות הוא שהקצב הזה מגביל תכונה
זה אומר שאתה יכול לעשות 1,000 בקשות ליום לכתובת או משהו כזה IP בלבד.
ואם אתה עושה הרבה בדיקות ודברים מהסוג הזה,
לפעמים אתה תוכל לרוץ לתוך זה, ופתאום זה מה שיבלום אותך
ואומרים לא, אני לא נותן לך שום נתונים נוספים.
>> מה אתה רוצה לעשות הוא לשחק לפי הכללים.
אתה רוצה לוודא שאתה קורא את מפרט ה-API בזהירות.
אם יש לו כללים מסוימים מצורפים אליו, כמו שאתה יכול לעשות X שאילתות ליום בלבד
או שאתה יכול לגשת לחלק מהנתונים של מספר מסוים של פעמים בלבד
או משהו כמו שאתה רוצה לוודא שאתה מקל על זה.
כל זמן שאתה משחק בתוך הכללים האלה אתה כנראה תצטרך זמן ממש נחמד באמצעות ממשקי API.
takeaway הכולל שלך הוא APIs של ממש, ממש שימושי.
>> יש API לכמעט כל שירות אינטרנט גדול בחוץ.
פחות או יותר כל חלק של כלי Suite גוגל, Google Maps, Google Earth,
Gmail, Google Calendar, כל הדברים האלה יש API שלה.
אתה יכול להשתמש בם כדי להגיע משני נתוני השרת ולשלוח את הנתונים לשרת.
במילים אחרות, אם אתה רוצה להפוך את אפליקציה של לוח שנה שיכול לעדכן
Google Calendar של מישהו, יש API לזה.
אם אתה רוצה לעשות משהו שהולך להגיד לך איפה
המיקום של כתובת מסוימת הוא שאתה יכול להשתמש-Google Maps API לשם כך.
APIs מידה פנטסטית שימושי, והם בכל מקום.
אם אתה מעוניין בסוג כלשהו של רעיון,
יש כנראה קשור API שאתה יכול להשתמש בו כדי לקבל נתונים רבים
מהר מאוד ומאוד פשוט.
>> אם אתה עדיין מחפש פרויקט, או אם אתה רק רוצה לשחק
עם משהו באופן כללי, APIs בהחלט שווה לעשות.
תודה, ואני שמח לענות על כל שאלה שאתם יכולים להיות.
אוקיי, תודה רבה.
[CS50.TV]