כיצד ליצור REST API עם Flask על Ubuntu

הקדם

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

דרישות קדמיות

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

  • מומחית בשורת הפקודות בLinux. עבור התחלה או השיחזור לשורת הפקודות, תוכלו לבקר במדריך זה על מדריך לשורת הפקודות בLinux

  • מומחה בבסיסיות של תכנות Python.

  • Python 3.7 או מעלה מותקן על מערכת ה-Ubuntu שלכם. כדי ללמוד איך להריץ תסריט Python על Ubuntu, תוכלו להגיע למדריך שלנו על איך להריץ תסריט Python על Ubuntu.

שלב 1 — הגדרת הסביבה של Flask

Ubuntu 24.04 מותקן את Python 3 באופן בר-מודל. פתח את התוכנית העיתונאית והריץ את הפקודה הבאה כדי לבדוק את התקנת Python 3:

root@ubuntu:~# python3 --version
Python 3.12.3

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

root@ubuntu:~# sudo apt install python3

בהמשך, עליך להתקין את משהו שנקרא pip על המערכת שלך:

root@ubuntu:~# sudo apt install python3-pip

ברגע שpip יותקן, בואו נתקל בהתקנת Flask.

תתקני Flask באמצעות pip. מומלץ לבצע זאת בסביבה מקולינארית כדי להימנע מקונפליקטים עם תוכניות אחרות במערכת שלך.

root@ubuntu:~# python3 -m venv הסבך_של_הפרוייקט_שלי
root@ubuntu:~# קלט myprojectenv/bin/activate
root@ubuntu:~# pip התקנת Flask

שלב 2 – יצירת יישומון Flask

השלב הבא הוא לכתוב את הקוד הפיתוח בשביל היישומון Flask. כדי ליצור תוכנית חדשה, תנוע לתוך תיבת הקוד שלך שתרצו:

root@ubuntu:~# cd ~/path-to-your-script-directory

ברגע שתהיה בתוך התיבה, יציר קובץ פיתוח Python חדש, app.py, וייבא Flask. אחר כך, יישמה יישומון Flask ויצירה נתיב בסיסי.

root@ubuntu:~# nano app.py

זה יפתח את מערכת העריכה הריקמה. כתוב את ההגיון שלך פה או העתק את הקוד הבא:

app.py
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify(message="Hello, World!")

# מאגר נתונים בזיכרון
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]

שלב 3 — יצירת נתיבים RESTful

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

GET, POST, PUT, וDELETE: השיטות האלה קורrespond לארבעה הפעלות הבסיסיות של אחסון קבע — הם לרוב מתייחסים ל CRUD (יצירה, קריאה, עדכון, מחיקה).

הוסף את הנתיבים הבאים לתוכנית ה Python app.py שלך:

app.py
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify(message="Hello, World!")

# מאגר מידע בזמנים
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]

# בקשת GET: שלוף את כל החלקים
@app.route('/api/items', methods=['GET'])
def get_items():
    return jsonify(items)

# בקשת GET: שלוף חלק ספציפי בעזרת המזהה
@app.route('/api/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = next((item for item in items if item["id"] == item_id), None)
    if item is None:
        return jsonify({"error": "Item not found"}), 404
    return jsonify(item)

# בקשת POST: יצירת חלק חדש
@app.route('/api/items', methods=['POST'])
def create_item():
    new_item = {"id": len(items) + 1, "name": request.json.get('name')}
    items.append(new_item)
    return jsonify(new_item), 201

# בקשת PUT: עדכון חלק קיים
@app.route('/api/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
    item = next((item for item in items if item["id"] == item_id), None)
    if item is None:
        return jsonify({"error": "Item not found"}), 404
    item['name'] = request.json.get('name', item['name'])
    return jsonify(item)

# בקשת DELETE: מחיקת חלק
@app.route('/api/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
    global items
    items = [item for item in items if item["id"] != item_id]
    return '', 204

if __name__ == "__main__":
    app.run(debug=True)

בואו נדע עוד על מה שכל פונקצייה עושה:

  • ייבאורים מ Flask: הקוד ייבאור רכיבים הנחוצים מ Flask: Flask, jsonify, וrequest.

  • מאגר מידע בזמנים: items הוא רשימה פשוטה של מישורים שמשמשת כמאגר מידע זמני עבור ה API. לכל חלק יש id וname.

  • בעיקרון GET ל /api/items: כשבקשת GET נעשית ל /api/items, השרת משחזר רשימת כל החפצים במאגר החפצים. זה שימושי עבור שימוש בכל המשאבים באוסף.
  • בעיקרון POST ל /api/items: בקשת POST אל /api/items מאפשרת ללקוח ליצור חפץ חדש. השרת מצפה לעצם JSON שמכיל פרטים של החפץ חדש בגוף הבקשה. אחרי יצירת החפץ, השרת מגיב עם החפץ החדש שניצר וקוד מצב 201 Created.
  • בעיקרון PUT ל /api/items/<int:item_id>: בקשת PUT אל /api/items/<item_id> משמשת כדי לעדכן חפץ קיים עם ה item_id המסומן. הלקוח שולח את המידע העדכוני בגוף הבקשה, והשרת משנה את החפץ הקיים. אם החפץ לא נמצא, השרת מחזירה שגיאה 404 Not Found.
  • DELETE /api/items/<int:item_id>: בקשת DELETE לכתובת /api/items/<item_id> מסירה את הפריט עם item_id הספציפי ממאגר הנתונים. אם הפריט נמחק בהצלחה, השרת מחזיר קוד סטטוס 204 No Content, המציין שהמחיקה בוצעה בהצלחה ואין תוכן נוסף להחזיר.

  • Running the Application: הבלוק if __name__ == "__main__": מבטיח שהאפליקציה של Flask תורץ כאשר הסקריפט מבוצע ישירות.

שלב 4 — הפעלת ובדיקת ה API שלך

התחל את השרת Flask באמצעות הפקת הפקודה הבאה:

root@ubuntu:~# python3 app.py

צריך להבחין בעזרת הפלט הבא של השרת Flask:

Output
* Serving Flask app 'app' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 837-877-972

מהפלט העליון ניתן להבחין שהשרת מפעיל ב http://127.0.0.1 ומקשיב בפורט 5000>

עכשיו, ניתן לבדוק את הנקודות הקצרות בעזרת curl, Postman, או משתמש אחר ברשת. במדריך הלקוח נהגה curl כדי לבדוק את הנקודות הקצרות ולשלוח בקשות HTTP.

פתח מסלול אחר של Ubuntu וביצע את הפקודות curl הבאות אחד אחר השני:

  • GET: curl http://127.0.0.1:5000/api/items
  • POST: curl -X POST -H "Content-Type: application/json" -d '{"name": "This is item 3"}' http://127.0.0.1:5000/api/items
  • PUT: curl -X PUT -H "Content-Type: application/json" -d '{"name": "This is updated item 1"}' http://127.0.0.1:5000/api/items/1
  • DELETE: curl -X DELETE http://127.0.0.1:5000/api/items/1

בואו נראה את כל הפקודות האלה בפעולה:

root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Output
[ { "id": 1, "name": "This is item 1" }, { "id": 2, "name": "This is item 2" } ]

אתה תוהיה מודע שהשרת מחזיר רשימה של כל החפצים במאגר החפצים.

בשימוש בשיטה POST, בואו נוסף חפץ חדש למאגר המידע.

root@ubuntu:~# curl -X POST -H "Content-Type: application/json" -d '{"name": "זה חפץ 3"}' http://127.0.0.1:5000/api/items
Output
{ "id": 3, "name": "This is item 3" }

הערה:במסך הנוסף שלך בו השרת Flask שלך מרוץ, תוהיה מודע לכל הבקשות HTTP שמובצעות וגם לקודות התגובות שלהן.

* Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 837-877-972
127.0.0.1 - - [23/Aug/2024 06:57:27] "GET /api/items HTTP/1.1" 200 -
127.0.0.1 - - [23/Aug/2024 06:59:56] "POST /api/items HTTP/1.1" 201 -

זו דרך נהדרת לנטר, דיבוג ושינוי בעיות בשרת.

בהמשך, בואו נבצע בקשה PUT. בקשה PUT ל /api/items/<item_id> תעדכן חפץ קיים בעזרת ה-item_id המסומן.

root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "זה חפץ מעודכן 1"}' http://127.0.0.1:5000/api/items/1
Output
{ "id": 1, "name": "This is updated item 1" }

עכשיו, בואו נבצע בקשה GET כדי לראות את החפץ 1 המעודכן.

root@ubuntu:~# curl http://127.0.0.1:5000/api/items/1
Output
{ "id": 1, "name": "This is updated item 1" }

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

root@ubuntu:~# curl -X DELETE http://127.0.0.1:5000/api/items/1

זה יהסיר את החפץ 1 מהמאגר המידע.

כדי לוודא את זה, בואו נבצע בקשה GET.

root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Output
[ { "id": 2, "name": "This is item 2" }, { "id": 3, "name": "This is item 3" } ]

אתה תשימו לב שפרט 1 אינו יותר נמצא ונוצר בצורה קבועה.

סיכום

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

Source:
https://www.digitalocean.com/community/tutorials/create-a-rest-api-using-flask-on-ubuntu