API Interaction

إتقان تصفح واجهات برمجة التطبيقات (APIs) باستخدام بايثون (Requests)

Spread the love

يُعد التعامل بكفاءة مع مجموعات البيانات الضخمة أمرًا بالغ الأهمية عند العمل مع واجهات برمجة التطبيقات. فجلب جميع البيانات دفعة واحدة قد يُثقل كلاً من الخادم وتطبيقك. تحلّ تقنية الترقيم الصفحي هذه المشكلة من خلال استرداد البيانات في أجزاء أصغر حجماً وأكثر قابلية للإدارة. تستعرض هذه المقالة استراتيجيات الترقيم الصفحي المختلفة باستخدام مكتبة requests في بايثون، مع التركيز على منطق الخادم.

محتويات

ما هو الترقيم الصفحي؟

الترقيم الصفحي هو تقنية استرداد البيانات من واجهة برمجة تطبيقات في صفحات أصغر متسلسلة بدلاً من استجابة ضخمة واحدة. تحتوي كل صفحة على مجموعة فرعية من البيانات، يتم تحديدها برقم الصفحة، أو الإزاحة، أو المؤشر، أو معرف فريد آخر. هذا يحسّن الأداء، ويقلل من استخدام الذاكرة، ويعزز تجربة المستخدم، خاصةً مع مجموعات البيانات الضخمة.

الترقيم الصفحي باستخدام زر “التالي”

تستخدم العديد من واجهات برمجة التطبيقات نهج زر “التالي” البسيط. تتضمن استجابة واجهة برمجة التطبيقات عنوان URL (غالبًا ضمن استجابة JSON) يشير إلى الصفحة التالية. يستمر هذا حتى يكون عنوان URL “التالي” فارغًا أو غائبًا.


import requests

def paginate_next_button(base_url):
    all_data = []
    url = base_url
    while url:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        all_data.extend(data.get('results', [])) #معالجة الحالات التي قد يكون مفتاح 'results' مفقوداً فيها
        url = data.get('next')
    return all_data

# مثال (استبدل بنقطة نهاية واجهة برمجة التطبيقات الخاصة بك)
base_url = "https://api.example.com/data?page=1"
all_data = paginate_next_button(base_url)
print(all_data)

الترقيم الصفحي باستخدام الإزاحة والحد

تستخدم بعض واجهات برمجة التطبيقات معلمات مثل offset و limit. يحدد offset نقطة البداية، وlimit يحدد عدد العناصر في كل صفحة. قد تحتاج إلى تحديد العدد الإجمالي للعناصر بشكل منفصل (مثلًا، من خلال مكالمة منفصلة لواجهة برمجة التطبيقات أو رأس مثل X-Total-Count).


import requests

def paginate_offset_limit(base_url, limit=10):
    all_data = []
    offset = 0
    while True:
        url = f"{base_url}&offset={offset}&limit={limit}"
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        results = data.get('results', [])
        if not results:  #التحقق مما إذا كانت الصفحة فارغة
            break
        all_data.extend(results)
        offset += limit
    return all_data

# مثال (استبدل بنقطة نهاية واجهة برمجة التطبيقات الخاصة بك)
base_url = "https://api.example.com/data"
all_data = paginate_offset_limit(base_url, limit=20)
print(all_data)

الترقيم الصفحي القائم على المؤشر

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


import requests

def paginate_cursor(base_url):
    all_data = []
    url = base_url
    while url:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        all_data.extend(data.get('results', []))
        url = data.get('next_cursor') #تكييف مع اسم المفتاح الفعلي في الاستجابة
    return all_data

# مثال (استبدل بنقطة نهاية واجهة برمجة التطبيقات الخاصة بك)
base_url = "https://api.example.com/data?cursor=" #قد يكون المؤشر الأولي فارغًا أو قيمة محددة
all_data = paginate_cursor(base_url)
print(all_data)

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *