למד כיצד ליצור ממשק API של RESTful באמצעות Flask ו-Postgres, המאפשר חילופי נתונים חלקים בין האפליקציה שלך למערכות חיצוניות.

ממשקי תכנות יישומים (API) הם חלק קריטי בבנייה וחיבור של מערכות שונות, המאפשרים ליישומים שלך לתקשר ולהחליף נתונים עם שירותים אחרים.

בעוד שפיתוח אחורי כולל יותר מסתם כתיבת ממשקי API - הוא מכסה גם כתיבת לוגיקה עסקית בצד השרת, עיצוב מערכת יעילה ארכיטקטורות ופונקציות מפתח אחרות, המשך לקרוא כדי ללמוד כיצד לבנות ממשק API פשוט של CRUD REST עם Flask (מסגרת Python קלת משקל), ו-Postgres מאגר מידע.

שימוש ב-Flask לבניית ממשקי API Backend

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

אתה יכול למצוא את קוד המקור של הפרויקט הזה בזה מאגר GitHub.

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

הגדר מסד נתונים של Postgres

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

instagram viewer

לחץ על צור מופע חדש לחצן כדי ליצור מופע חדש עבור היישום שלך.

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

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

הגדר שרת Flask

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

לפני התקנת Flask, אשר שאתה מפעיל את Python גרסה 3.6+ במחשב שלך. אם לא, עליך להתקין את הגרסה העדכנית ביותר פִּיתוֹן גִרְסָה.

פיתון --גרסה

לאחר מכן, התקן virtualenv, כדי ליצור סביבת פיתוח וירטואלית מבודדת.

pip להתקין virtualenv

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

virtualenv venv

לבסוף, הפעל את הסביבה הוירטואלית.

# בווינדוס: 
.\venv\Scripts\להפעיל
# ב-Unix או MacOS:
מקור venv/bin/activate

התקן את החבילות הנדרשות

בספריית השורש של תיקיית הפרויקט שלך, צור א requirements.txt קובץ והוסף חבילות אלה.

בקבוק
python-dotenv
psychopg2-בינארי

לאחר מכן, התקן את החבילות.

pip install -r requirements.txt

ה psychopg2-בינארי היא ספריית Python הפועלת כתווך, כדי לאפשר לך ליצור קשרים עם מסד הנתונים Postgres שלך ולבצע פעולות מסד נתונים שונות.

לבסוף, צור א .env קובץ והדבק את כתובת האתר של מסד הנתונים שלך.

DATABASE_URL= כתובת האתר של מסד הנתונים שלך

צור את שרת Flask

לבסוף, צור app.py הקובץ בספריית השורש, והוסף את הקוד למטה.

יְבוּא OS 
יְבוּא psychopg2
מ dotenv יְבוּא load_dotenv
מ בקבוק יְבוּא Flask, request, jsonify

load_dotenv()

app = Flask (__name__)
url = os.getenv("DATABASE_URL")
connection = psychopg2.connect (כתובת אתר)

@app.get("/")
defבית():
לַחֲזוֹר"שלום עולם"

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

צור את REST API המאפשר פעולות CRUD

כעת, בנה את REST API המיישם את ארבע פעולות ה-CRUD.

צור טבלת הדגמה

צור טבלת משתמשים בתוך מסד הנתונים.

בקובץ app.py, הוסף את הקוד למטה.

CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS משתמשים (מזהה SERIAL PRIMARY KEY, שם TEXT);"

עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute (CREATE_USERS_TABLE)

  • קוד זה יוצר טבלת PostgreSQL חדשה בשם משתמשים עם שני עמודים.
  • הוא משתמש בשיטת החיבור psycopg2 כדי ליצור את החיבור עם מסד הנתונים ויוצר אובייקט סמן חדש באמצעות connect.cursor שיטה המשמשת לביצוע שאילתות SQL.

1. הגדר את שיטת POST

צור את מסלול הפוסט כדי להוסיף נתונים.

INSERT_USER_RETURN_ID = "INSERT INTO users (שם) VALUES (%s) RETURNING id;"
@app.route("/api/user", methods=["POST"])
defצור משתמש():
data = request.get_json()
שם = נתונים["שֵׁם"]
עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute (INSERT_USER_RETURN_ID, (שם,))
user_id = cursor.fetchone()[0]
לַחֲזוֹר {"תְעוּדַת זֶהוּת": זהות המשתמש, "שֵׁם": שם, "הוֹדָעָה": f"משתמש {שֵׁם} נוצר."}, 201
  • מחרוזת השאילתה של SQL מגדירה משפט SQL שיבוצע באמצעות ה- cursor.execute שיטה להכנסת שורה חדשה עם שם משתמש לתוך של משתמשים טבלה במסד הנתונים. זה מחזיר את מזהה המשתמש החדש שנוצר.
  • ה צור משתמש הפונקציה לוקחת שם כפרמטר לאחסון במסד הנתונים בזמן שה- cursor.fetchone השיטה נקראת כדי לאחזר את מזהה המשתמש החדש שנוצר. לבסוף, מוחזר מילון המכיל את הזיהוי והשם של המשתמש החדש שנוצר, יחד עם הודעה המציינת שהמשתמש נוצר בהצלחה.

2. הגדר את שיטת GET

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

SELECT_ALL_USERS = "בחר * ממשתמשים;"

@app.route("/api/user", methods=["GET"])
defקבל_כל_משתמשים():
עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute (SELECT_ALL_USERS)
users = cursor.fetchall()
אם משתמשים:
תוצאה = []
ל מִשׁתַמֵשׁ ב משתמשים:
result.append({"תְעוּדַת זֶהוּת": משתמש[0], "שֵׁם": משתמש[1]})
לַחֲזוֹר jsonify (תוצאה)
אַחֵר:
לַחֲזוֹר jsonify({"שְׁגִיאָה": f"משתמשים לא נמצאו."}), 404

@app.route("/api/user/", methods="GET"])
defget_user(זהות המשתמש):
עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute("בחר * ממשתמשים WHERE id = %s", (זהות המשתמש,))
user = cursor.fetchone()
אם מִשׁתַמֵשׁ:
לַחֲזוֹר jsonify({"תְעוּדַת זֶהוּת": משתמש[0], "שֵׁם": משתמש[1]})
אַחֵר:
לַחֲזוֹר jsonify({"שְׁגִיאָה": f"משתמש עם תעודת זהות {זהות המשתמש} לא נמצא."}), 404

  • נתיב API ראשון זה מטפל בבקשות HTTP GET לאחזור כל המשתמשים ממסד הנתונים. זה מאחזר את כל המשתמשים ממסד הנתונים ומחזיר את התוצאות בפורמט JSON בתגובה.
  • נתיב API שני זה מטפל בבקשות HTTP GET לאחזור נתונים עבור משתמש ספציפי ממסד הנתונים. זה לוקח את זהות המשתמש כפרמטר, מאחזר את נתוני המשתמש ממסד הנתונים, ומחזיר את התוצאות בפורמט JSON בתגובה.

3. הגדר את שיטת PUT

צור את נתיב ה-put כדי לעדכן את הנתונים המאוחסנים במסד הנתונים.

@app.route("/api/user/", methods="PUT"])
defupdate_user(זהות המשתמש):
data = request.get_json()
שם = נתונים["שֵׁם"]
עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute (UPDATE_USER_BY_ID, (שם, user_id))
אם cursor.rowcount == 0:
לַחֲזוֹר jsonify({"שְׁגִיאָה": f"משתמש עם תעודת זהות {זהות המשתמש} לא נמצא."}), 404
לַחֲזוֹר jsonify({"תְעוּדַת זֶהוּת": זהות המשתמש, "שֵׁם": שם, "הוֹדָעָה": f"משתמש עם תעודת זהות {זהות המשתמש} מְעוּדכָּן."})
  • ה update_user הפונקציה לוקחת את פרמטר מזהה המשתמש כקלט ומשתמשת בו כדי לעדכן את שם המשתמש שצוין במסד הנתונים.
  • אם פעולת העדכון מצליחה, היא מחזירה אובייקט JSON עם מזהה המשתמש המעודכן, השם והודעת הצלחה בתגובה.

4. הגדר את שיטת DELETE

יישם את מסלול המחיקה כדי למחוק את הנתונים המאוחסנים של משתמש ספציפי במסד הנתונים.

@app.route("/api/user/", methods=["DELETE"])
defמחק משתמש(זהות המשתמש):
עם חיבור:
עם connection.cursor() כפי ש סַמָן:
cursor.execute (DELETE_USER_BY_ID, (user_id,))
אם cursor.rowcount == 0:
לַחֲזוֹר jsonify({"שְׁגִיאָה": f"משתמש עם תעודת זהות {זהות המשתמש} לא נמצא."}), 404
לַחֲזוֹר jsonify({"הוֹדָעָה": f"משתמש עם תעודת זהות {זהות המשתמש} נמחק."})
  • נתיב API זה מטפל בפונקציונליות המחיקה של משתמש ספציפי ממסד הנתונים על סמך המזהה שלו. אם המשתמש לא נמצא, הוא מחזיר קוד מצב 404 עם הודעת שגיאה. עם זאת, אם פעולת המחיקה הצליחה, היא מחזירה אובייקט JSON עם הודעת הצלחה בתגובה.

כתיבת ממשקי API של REST עם Flask

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

בין אם אתה בונה בלוג פשוט או יישום אינטרנט מורכב, Flask ו-Postgres מציעים תכונות ויכולות עוצמתיות הנדרשות ליצירת מערכת עורפית חזקה. לחלופין, אתה יכול לעשות שימוש בטכנולוגיות אחרות כמו FastAPI ו- MongoDB כדי לבנות ממשקי API של RESTful.