כברירת מחדל, סביבת זמן הריצה של Python 2.7 משתמשת בשירות אחזור של כתובות אתרים כדי לטפל בבקשות HTTP(S) יוצאות, גם אם משתמשים בספריות Python urllib, urllib2 או httplib כדי להנפיק את הבקשות האלה. השירות URL Fetch לא מטפל בבקשות מהספרייה requests, אלא אם מפעילים אותו באופן מפורש.
זמן הריצה של Python 3 לא צריך שירות ביניים כדי לטפל בבקשות יוצאות. אם אתם רוצים להפסיק להשתמש ב-URL Fetch APIs אבל עדיין צריכים פונקציונליות דומה, כדאי להעביר את הבקשות האלה לשימוש בספריית Python רגילה, כמו ספריית requests.
ההבדלים העיקריים בין URL Fetch לבין ספריות Python רגילות
מגבלת הגודל והמכסות של בקשות שמטופלות על ידי URL Fetch שונות ממגבלת הגודל והמכסות של בקשות שלא מטופלות על ידי URL Fetch.
כשמשתמשים ב-URL Fetch, אם האפליקציה שולחת בקשה לאפליקציית App Engine אחרת, URL Fetch מוסיף את כותרת הבקשה
X-Appengine-Inbound-Appidכדי לאשר את הזהות של האפליקציה. האפליקציה שמקבלת את הבקשה יכולה להשתמש בזהות כדי לקבוע אם לעבד את הבקשה.הכותרת הזו זמינה רק בבקשות שנשלחות מהאפליקציה שלכם אם היא משתמשת ב-URL Fetch. אם אתם או צד שלישי מוסיפים את הכותרת לבקשה, App Engine מסיר אותה.
למידע על הצהרה ואימות של זהות בלי להשתמש ב-URL Fetch, אפשר לעיין במאמר העברת זהות האפליקציה לאסימונים מזהים מסוג OIDC.
דוגמה לשימוש בכותרת הבקשה כדי לאמת את הזהות של האפליקציה שקוראת ל-API כשבקשות נשלחות בין אפליקציות App Engine מופיעה בדוגמה לבקשה מ-App Engine אל App Engine.
אפשר להשתמש ב-URL Fetch כדי להגדיר זמן קצוב לתפוגה כברירת מחדל לכל הבקשות. ברוב הספריות של Python 3, כמו
requestsו-urllib, הגדרת ברירת המחדל של הזמן הקצוב לתפוגה היאNone, ולכן צריך לעדכן כל בקשה שהקוד מבצע כדי לציין זמן קצוב לתפוגה.
סקירה כללית של תהליך המיגרציה
אם האפליקציה שלכם משתמשת ב-URL Fetch APIs כדי לשלוח בקשות, צריך לעדכן את הקוד כדי להשתמש במקום זאת בספריית Python רגילה. מומלץ לציין זמן קצוב לתפוגה לכל בקשה.
בודקים את הבקשות היוצאות בשרת הפיתוח המקומי.
מגדירים את האפליקציה כך שתדלג על URL Fetch כשהיא פועלת ב-App Engine.
פורסים את האפליקציה.
החלפת ממשקי URL Fetch API בספריית Python
אם אתם לא משתמשים כבר בספריית Python רגילה כדי לשלוח בקשות יוצאות, אתם צריכים לבחור ספרייה ולהוסיף אותה לתלות של האפליקציה.
לדוגמה, כדי להשתמש בספריית הבקשות, יוצרים קובץ
requirements.txtבאותה תיקייה שבה נמצא הקובץapp.yamlומוסיפים את השורה הבאה:requests==2.24.0כדי להבטיח תאימות ל-Python 2, מומלץ להצמיד את ספריית
requestsלגרסה 2.24.0. כשפורסים את האפליקציה, App Engine מוריד את כל יחסי התלות שמוגדרים בקובץrequirements.txt.לפיתוח מקומי, מומלץ להתקין תלות בסביבה וירטואלית כמו venv.
מחפשים בקוד שימוש במודול
google.appengine.api.urlfetchומעדכנים את הקוד כך שישתמש בספריית Python.
יצירת בקשות HTTPS פשוטות
בדוגמה הבאה מוצג איך לשלוח בקשת HTTPS רגילה באמצעות הספרייה requests:
שליחת בקשות HTTPS אסינכרוניות
בדוגמה הבאה מוצג איך לשלוח בקשת HTTPS אסינכרונית באמצעות הספרייה requests:
בדיקה מקומית
אם עדכנתם בקשות יוצאות, מריצים את האפליקציה בשרת הפיתוח המקומי ומוודאים שהבקשות מצליחות.
דילוג על אחזור כתובת URL
כדי להפסיק את הטיפול בבקשות של URL Fetch כשפורסים את האפליקציה ב-App Engine:
בקובץ
app.yaml, מגדירים את משתנה הסביבהGAE_USE_SOCKETS_HTTPLIBלכל ערך. הערך יכול להיות כל ערך, כולל מחרוזת ריקה. לדוגמה:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''אם הפעלתם את URL Fetch כדי לטפל בבקשות שנשלחות מספריית
requests, אתם יכולים להסיר את הבקשותAppEngineAdapterמהאפליקציה.לדוגמה, להסיר את
requests_toolbelt.adapters.appengineמהקובץappengine_config.pyואתrequests_toolbelt.adapters.appengine.monkeypatch()מקובצי Python.
שימו לב: גם אם תעקפו את URL Fetch כמו שמתואר בשלבים הקודמים, האפליקציה שלכם עדיין יכולה להשתמש ישירות ב-URL Fetch API.
פריסת האפליקציה
כשמוכנים לפרוס את האפליקציה, צריך:
-
כדי לוודא שהאפליקציה לא מבצעת קריאות ל-API של Url Fetch, מעיינים בדף Quotas (מכסות) של App Engine במסוף Google Cloud .
אם האפליקציה פועלת ללא שגיאות, משתמשים בפיצול תנועה כדי להגדיל בהדרגה את התנועה לאפליקציה המעודכנת. חשוב לעקוב מקרוב אחרי האפליקציה כדי לזהות בעיות לפני שמפנים אליה עוד תנועה.