كيفية إنشاء API REST بواسطة Flask على نظام Ubuntu

مقدمة

في هذا التورية، ستتعلم كيفية إنشاء رسمي باي بي إس بواسطة Flask، وهي إطار ويب بالانتاج الخفيف للبرمجيات البينات. سنقوم بالبناء الأساسي لتطبيق Flask، وبتحديد المسارات، وتعامل الطلبات، وإيرادات البيانات الجاف. بنهاية هذه التورية، سيكون لديك تطبيق عمل يمكنك توسيعه ودمجه مع أخرى التطبيقات.

المقاييس السابقة

  • خوادم تشغيل Ubuntu ومستخدم غير رئيسي بمساواة تفويض والنظام من النظام المواجه للنار. للمراجعة إلى كيفية تأسيس هذا الاحداث، يرجى اختيار توزيعك الموجود في هذا القائمة وتتبع دراستك البدائية للخوادم الأولية. يرجى تأكد من العمل بنسخ النسخ المدعومة من Ubuntu.

  • معرفة بالخطأ الرسمي للأجهزة اللinux. إذا كان لديك عدد قليل من المعرفة أو الحاجة إلى تجديد ذلك، يمكنك الذهاب إلى هذه الدرسة البسيطة عن الخطأ الرسمي للأجهزة اللinux.

  • فهم بدئي للبرمجة بالبوتسوير.

  • تثبيت Python 3.7 أو أعلى في نظامك الأوبونتو. لتعلم كيفية تشغيل 脚本 Python في Ubuntu، يمكنك المرور إلى درسنا التورية عن كيفية تشغيل 脚本 Python في Ubuntu.

خطوة 1 — إعداد بيئة فلاسك

أوبونت 24.04 يشترك ببيثون 3 بالإفتراض. افتح المستودع وأجراء أوامر التحقيق للتأكد من تشغيل بيثون 3:

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

إذا كانت بيثون 3 متنشئة بالحاسوب الخاص بك، ستعود أوامر الأعلاه على إصدار التثبيت الحالي لبيثون 3. في حالة عدم تثبيتها، يمكنك أن تتمكن من تثبيتها بواسطة الأمر التالي:

root@ubuntu:~# sudo apt install python3

من ثم، يتوجب عليك تثبيت موجه التركيب الpip على نظامك:

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

بمجرد تثبيت pip، دعونا نتثبيت Flask.

ستتثبيت Flask من خلال pip. يوصف بهذا التوجه القيام به في بيئة فارغة لتجنب تضاربات مع بعض المعاملات الأخرى على نظامك.

root@ubuntu:~# python3 -m venv myprojectenv
root@ubuntu:~# source myprojectenv/bin/activate
root@ubuntu:~# pip install 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. هذه الطرق تتطابق مع الأعمال الأساسية للتخزين الدائمي — وهي في الغالب تسمى CRUD (إنشاء، قراءة، تحديث، حذف).

أضف مسارات التالية إلى 脚本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: عندما يتم إدراج sol·req GET إلى /api/items, يعيد الخادم إرجاع قائمة بجميع العناصر في قاعدة بيانات العناصر. هذا مفيد للحصول على جميع الموارد في مجموعة.
  • POST /api/items: يتيح إدراج sol·req POST إلى /api/items للعميل أن يخلق عنصر جديد. الخادم يتوقع أجسام العنصر الجديد في جسم ال sol·req. بعد إنشاء العنصر، يستجيب الخادم بالعنصر الجديد المنشور ورمز 201 Created.
  • PUT /api/items/<int:item_id>: يستخدم إدراج sol·req PUT إلى /api/items/<item_id> لتحديث العنصر الموجود بالمعرف item_id. يرسل العميل البيانات المتحدثة في جسم ال sol·req، ويغير الخادم العنصر الموجود. إذا لم يجد العنصر، يعيد الخادم إرجاع خطأ 404 Not Found.
  • DELETE /api/items/<int:item_id>: يُستخدم طلب DELETE إلى /api/items/<item_id> لإزالة العنصر بالمعرف المحدد item_id من قاعدة البيانات. إذا تم حذف العنصر بنجاح، يستجيب الخادم برمز حالة 204 No Content، مما يشير إلى أن الحذف تم بنجاح ولا يوجد محتوى آخر لإرجاعه.

  • تشغيل التطبيق: يضمن الكود if __name__ == "__main__": تشغيل تطبيق Flask عند تنفيذ السكربت مباشرة.

خطوة 4 — تشغيل وتفقد منصة ال-API الخاصة بك

قم بتشغيل مزيد من خلال أوامر البرمجيات والتي تلي بالأوامر التالية:

root@ubuntu:~# python3 app.py

يمكنك أن تلاحظ الخوادم البرمجية تشغيلها والمخرج التالي:

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 أو 客户端 HTTP آخر. في هذا التوريتال سوف تستخدم curl لتختبر النقاط النهائية وإرسال ال solicitudes HTTP.

افتح console 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": "This is item 3"}' http://127.0.0.1:5000/api/items
Output
{ "id": 3, "name": "This is item 3" }

ملاحظة: في مسجلك الآخر حيث يعمل مخزنك الفلاسكا سوف تلاحظ جميع ال solicitudes 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 -

هذه طريقة عظيمة لرصد وتصحيح وحل أي مشاكل مع المخزن.

من ثم دعونا نقوم بتنفيذ solicitud PUT. سيتم تحديث بند قائم بالitem_id المحدد بواسطة ال solicitud PUT إلى /api/items/<item_id>.

root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "This is updated item 1"}' http://127.0.0.1:5000/api/items/1
Output
{ "id": 1, "name": "This is updated item 1" }

الآن دعونا نقوم بتنفيذ solicitud GET لرؤية البند المحدد 1 المتحدث.

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

وأخيرًا دعونا نقوم بتنفيذ solicitud DELETE لحذف بند من المخزن.

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

هذا سيحذف البند 1 من المخزن.

للتحقق من هذا دعونا نقوم بتنفيذ solicitud 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 لم يعد موجودًا وتم حذفه بشكل دائمي.

الخاتم

في هذا التوريتال، قمت ببناء تطبيق REST API باستخدام Flask. يمكنك الآن توسيع هذه ال API بالمسارات الإضافية، أو دمجها مع قاعدة بيانات، أو تنقلها إلى منصة سحابية مثل DigitalOcean. Flask أداة قوية لبناء APIs بسرعة وبفعالية جيدة، ومع هذه الأساسيات، أنت مستعد لبناء تطبيقات أكثر تعقيدًا.

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