بناء واجهة برمجة تطبيقات (API) باستخدام Flask في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 10 سبتمبر 2024

محتوى المقال

بناء واجهة برمجة تطبيقات (API) باستخدام Flask في Python

أصبحت واجهات برمجة التطبيقات (APIs) جزءًا أساسيًا من تطوير البرمجيات الحديثة، حيث تتيح للمطورين بناء تطبيقات قابلة للتوسع والتكامل بسهولة. في هذا المقال، سنتعلم كيفية بناء واجهة برمجة تطبيقات (API) باستخدام إطار العمل Flask في Python. سنبدأ من إعداد البيئة وتثبيت Flask، ثم سنتناول كيفية إنشاء المسارات، التعامل مع الطلبات، وإرجاع الاستجابات.

ما هو Flask؟

Flask هو إطار عمل ويب صغير ومرن مكتوب بلغة Python. يُستخدم بشكل شائع لبناء تطبيقات الويب وواجهات برمجة التطبيقات (APIs) بسبب سهولة استخدامه ومرونته. يتميز Flask ببساطته وقدرته على التوسع بفضل مجموعة كبيرة من الإضافات (extensions) المتاحة.

لماذا نستخدم Flask لبناء API؟

  • سهولة الإعداد والتعلم، مما يجعله مناسبًا للمبتدئين والمحترفين على حد سواء.
  • مرونة عالية في بناء التطبيقات الصغيرة والكبيرة.
  • مجتمع دعم كبير ومجموعة واسعة من الإضافات لتعزيز الوظائف.

إعداد البيئة وتثبيت Flask

قبل البدء في بناء الـ API، نحتاج إلى إعداد البيئة وتثبيت Flask. يُفضل استخدام بيئة افتراضية لعزل الحزم المطلوبة للمشروع.

إنشاء بيئة افتراضية

$ python -m venv venv
$ source venv/bin/activate # على نظام Windows: venv\Scripts\activate

تثبيت Flask

$ pip install Flask

إنشاء أول API باستخدام Flask

لنبدأ بإنشاء ملف Python جديد يُسمى app.py. سنقوم بإنشاء API بسيطة تستجيب لطلب HTTP GET.

from flask import Flask, jsonify

app = Flask(__name__)

# مسار الجذر للـ API
@app.route('/', methods=['GET'])
def home():
    return jsonify({'message': 'مرحبًا بكم في API باستخدام Flask!'})

# تشغيل التطبيق
if __name__ == "__main__":
    app.run(debug=True)

في هذا المثال، قمنا بإنشاء API بسيطة تستجيب لطلب GET على مسار الجذر / وترسل استجابة JSON تحتوي على رسالة ترحيبية. لتشغيل التطبيق، قم بتشغيل الأمر التالي في الطرفية:

$ python app.py

إضافة مسارات أخرى إلى API

لجعل الـ API أكثر فائدة، سنضيف مسارات إضافية للتعامل مع أنواع أخرى من الطلبات مثل POST، PUT، و DELETE. في المثال التالي، سنقوم بإنشاء واجهة بسيطة لإدارة قائمة مهام (TODO list).

إعداد البيانات الأولية

سنبدأ بإعداد قائمة أولية من المهام في شكل قائمة من القواميس:

todos = [
    {'id': 1, 'task': 'تعلم Flask'},
    {'id': 2, 'task': 'بناء API'},
    {'id': 3, 'task': 'كتابة توثيق'}
]

إنشاء مسار GET لعرض قائمة المهام

يمكننا الآن إضافة مسار لعرض قائمة المهام:

@app.route('/todos', methods=['GET'])
def get_todos():
    return jsonify(todos)

عند زيارة المسار /todos، ستعرض الـ API قائمة المهام كاستجابة JSON.

إضافة مهمة جديدة باستخدام POST

لإضافة مهمة جديدة، سنستخدم مسار POST. سنحتاج إلى قراءة البيانات المرسلة في جسم الطلب:

from flask import request

@app.route('/todos', methods=['POST'])
def add_todo():
    new_todo = {
        'id': len(todos) + 1,
        'task': request.json['task']
    }
    todos.append(new_todo)
    return jsonify(new_todo), 201

هنا، نقوم بإنشاء مسار POST لإضافة مهمة جديدة إلى قائمة المهام. نقوم بقراءة البيانات من جسم الطلب باستخدام request.json، ثم نضيفها إلى قائمة المهام.

تحديث مهمة موجودة باستخدام PUT

يمكننا أيضًا إضافة مسار لتحديث مهمة موجودة باستخدام PUT:

@app.route('/todos/', methods=['PUT'])
def update_todo(todo_id):
    for todo in todos:
        if todo['id'] == todo_id:
            todo['task'] = request.json['task']
            return jsonify(todo)
    return jsonify({'error': 'Task not found'}), 404

في هذا المثال، نقوم بتحديث مهمة بناءً على معرفها id في القائمة. إذا وُجدت المهمة، نقوم بتحديثها وإرجاعها. إذا لم تُوجد، نعيد استجابة خطأ 404.

حذف مهمة باستخدام DELETE

أخيرًا، نضيف مسارًا لحذف مهمة باستخدام DELETE:

@app.route('/todos/', methods=['DELETE'])
def delete_todo(todo_id):
    global todos
    todos = [todo for todo in todos if todo['id'] != todo_id]
    return jsonify({'message': 'Task deleted'})

هنا، نقوم بحذف مهمة بناءً على معرفها id من القائمة وإرجاع رسالة تأكيد.

اختبار الـ API

يمكنك اختبار API باستخدام أدوات مثل Postman أو cURL. يمكن استخدام curl لإرسال طلبات HTTP إلى API والتحقق من الاستجابات.

# اختبار GET
$ curl http://127.0.0.1:5000/todos

# اختبار POST
$ curl -X POST http://127.0.0.1:5000/todos -H "Content-Type: application/json" -d '{"task": "تعلم API"}'

# اختبار PUT
$ curl -X PUT http://127.0.0.1:5000/todos/1 -H "Content-Type: application/json" -d '{"task": "مراجعة Flask"}'

# اختبار DELETE
$ curl -X DELETE http://127.0.0.1:5000/todos/1

الخلاصة

بناء واجهة برمجة تطبيقات باستخدام Flask في Python هو عملية بسيطة وفعالة. يمكنك بسهولة إنشاء مسارات للتعامل مع الطلبات المختلفة، معالجة البيانات، وإرجاع الاستجابات المناسبة. Flask هو إطار عمل قوي يتيح لك تطوير تطبيقات ويب وواجهات برمجة تطبيقات بسرعة وكفاءة، مما يجعله خيارًا ممتازًا لكل من المشاريع الصغيرة والكبيرة.

طور مهاراتك: مقالات يجب قراءتها في البرمجة