שרת FastApi על דוקר ב10 דקות


דרישות: היכרות עם פייתון, עם web frameworks (כקונספט) והיכרות בסיסית עם דוקר.

שתי השחקניות החזקות ביותר כיום בתחום ה web frameworks לפייתון הן django ו flask. הפוסט של היום מתעסק בשחקנית החדשה והסקסית בתחום שנכתבה על ידי tiangolo ובעיני מסמלת את כל מה שטוב ויפה ב open source software.
FastApi הוא web framework פייתוני מודרני וחדשני אשר נועד ליצירת APIs. הוא נבנה בעיקרו על הענקיות starlette (לניהול העבודה ב web) ועל pydantic (לולידציית data).

הפיצ׳רים העיקריים בהם הכלי מתגאה הם - מהירות (ביצועים), מהירות קידוד, הפחתת באגים (כתוצאה מהפיכת תהליכים שהיו נכתבים ידנית לאוטומטיים), אינטואיטיביות, פשטות, רובסטיות, וסטנדרטיות (עבודה עם JSON schemas ו OpenApi).

לכלי קיימות יכולות רבות אותן אני ממליץ לכם לקרוא בעיון בדוקונטציה הרשמית  (דרך אגב, אחת הדוקומנטציות הטובות שיצא לי לראות).
בפוסט הזה אתמקד ביצירת API פשוט באמצעות הכלי (מעין hello-world) ובהמשך אגע באיזורים קצת יותר מתקדמים כמו חיבור DB, בדיקות, א-סינכרוניות, authorization ועוד טיפים ויכולות מגניבות בהן יצא לי להתקל.

יצירת API פשוט

נתקין את התלויות הבאות (רצוי בתוך סביבה וירטואלית):

pip install fastapi "uvicorn[standard]"

נכתוב לקובץ main.py את התוכן הבא:


הסבר קצר:
בקובץ אנחנו רואים יצירת מופע של המחלקה FastAPI באצמעותה אנחנו ממפים בין הבקשות שהולכות להגיע אל השרת אל הפונקציות המתאימות להן.
ניתן לראות שתי פונקציות שיצרנו, root ו item כשאל root נגיע כשנשלח בקשת get אל הכתובת של האפליקציה שלנו מבלי שום ניתוב (/http://localhost:8000 במקרה הזה) ואל item נגיע כשנשלח בקשת get אל /item בכתובת שלנו עם מספר כפרמטר (אותו מספר יחזור בתגובה לבקשה)

כעת נשאר רק להריץ את השרת הקטן שלנו לוקאלית עם הפקודה:
uvicorn main:app --reload

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


ההרצה עם הדגל 'reload' גורמת לכך שבכל שינוי של הקוד האפליקציה שלנו תעדכן את עצמה (מצוין לזמן פיתוח).

דוקומנטציה אוטומטית

אחד הפיצ׳רים המגניבים ביותר ב FastAPI הוא דוקומנטציית ה Swagger האוטומטית שהוא מייצר.
ניתן לגלוש ל localhost:8000/docs ולראות את הקסם :)

הרצה על דוקר קונטיינר

נכתוב Dockerfile פשוט בתיקיה הראשית עם השלבים הבאים


כעת נבנה את ה image באמצעות הפקודה:

docker build -t tomercode-fastapi .

הפרמטר t מציין את התגית של ה image בה נוכל להשתמש כדי לא לעבוד עם ה hash שלו והנקודה בסוף מציינת מאיפה לבנות.

ואז נריץ את את השרת באמצעות הפקודה run:

docker run -d --name fastapi-container -p 80:80 tomercode-fastapi

הפרמטר d יגרום להרצה ברקע, עם p אנחנו מגדירים לאיזה פורט הקונטיינר מאזין (צד שמאל של הנקודותיים) ולאיזה פורט התקשורת מועברת בתוך הקונטיינר (צד ימין), עם name נגדיר שם לקונטיינר כדי שנוכל לפנות אליו בקלות ולאחר מכן נכתוב את התגית של ה image אותו נרצה להריץ.

עכשיו הקונטיינר אמור לרוץ ובתוכו אפליקציית ה web הפשוטה שכתבנו ב10 דק עם FastAPI.
נגלוש ל http://127.0.0.1 ונראה שהאפליקציה שלנו רצה

סיכום

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

תגובות

פוסטים פופולריים מהבלוג הזה

מה ההבדל בין אוטומציה לפיתוח רגיל

מה זה singleton ולמה לא כדאי להשתמש בו?

מדריך | אוטומציה באמצעות Selenium | חלק 1 - מבוא