انتقل إلى المحتوى

بايثون وواجهات برمجة التطبيقات: كيفية استخدام طلبات بايثون لبناء تطبيقات تعتمد على واجهة برمجة التطبيقات

أهلاً! هل تتطلع إلى رفع مستوى مهاراتك في لغة بايثون ومعرفة كيفية دمج واجهات برمجة التطبيقات القوية في تطبيقاتك؟ ثم هذا الدليل هو بالنسبة لك.

سأقوم بإرشادك خلال استخدام مكتبة طلبات Python الرائعة للتفاعل مع واجهات برمجة تطبيقات الويب بجميع أنواعها. من خلال بعض المعرفة والطلبات الأساسية بلغة Python، ستتمكن من:

  • الاستعلام عن البيانات من أي نقطة نهاية API
  • أنشئ تطبيقات تتكامل مع الخدمات الشائعة مثل Twitter وStripe وTwilio وما إلى ذلك.
  • أتمتة سير العمل عن طريق ربط واجهات برمجة التطبيقات معًا
  • أطلق العنان للكثير من البيانات والوظائف المفيدة لتحسين تطبيقات Python الخاصة بك

يبدو مثيرا أليس كذلك؟ دعونا الغوص في!

لماذا نستخدم واجهات برمجة التطبيقات في بايثون؟

قبل أن ندخل في الكود، دعونا نفهم أولاً لماذا يعد الاتصال بواجهات برمجة التطبيقات مفيدًا جدًا للمطورين.

تسمح واجهات برمجة التطبيقات لتطبيقات البرامج المختلفة بالتواصل مع بعضها البعض. تعرض الشركات والمؤسسات واجهات برمجة التطبيقات للسماح للمطورين ببناء التطبيقات باستخدام خدماتهم بسهولة أكبر.

فيما يلي بعض أهم الأسباب لاستخدام واجهات برمجة التطبيقات في التعليمات البرمجية الخاصة بك:

  • توفير الوقت – لا تقم بإعادة بناء شيء من الصفر موجود بالفعل كواجهة برمجة التطبيقات (API)!
  • الاستفادة من البيانات - الوصول إلى مصادر البيانات المفيدة مثل الطقس والأسهم ووسائل التواصل الاجتماعي والمزيد.
  • توسيع الوظائف - دمج الخرائط والمدفوعات والإشعارات والمزيد.
  • أتمتة سير العمل - ربط الأنظمة المختلفة معًا بسلاسة.
  • إنشاء التطبيقات بشكل أسرع - ركز على منطق التطبيق الخاص بك بدلاً من البنية التحتية الأساسية.

باختصار، تساعدك واجهات برمجة التطبيقات (APIs) المصممة جيدًا على تطوير تطبيقات أفضل وبشكل أسرع.

وفقًا تقرير حالة API لعام 2024 الصادر عن Postman، يتزايد اعتماد واجهة برمجة التطبيقات العامة بسرعة:

  • تستهلك 72% من المؤسسات واجهات برمجة التطبيقات العامة كجزء من أعمالها الأساسية.
  • 58% لديهم واجهات برمجة التطبيقات العامة نفسها.
  • زادت طلبات واجهة برمجة التطبيقات (API) بنسبة تزيد عن 650% من عام 2020 إلى عام 2021 بالنسبة للمستجيبين.

مع انتشار واجهات برمجة التطبيقات (APIs) في كل مكان عبر الصناعات، فقد حان الوقت لتحسين مهاراتك في الاتصال بها باستخدام Python.

الشروع في العمل مع طلبات بايثون

لدى Python مكتبات رائعة تجعل العمل مع واجهات برمجة التطبيقات أمرًا سهلاً. الأكثر شعبية هو الطلبات.

تتيح لك الطلبات الاتصال بواجهات برمجة التطبيقات باستخدام بضعة أسطر من التعليمات البرمجية:

import requests

response = requests.get(‘https://api.data.gov/education‘)

مقارنة بالبدائل ذات المستوى الأدنى مثل لغة بايثون المدمجة urllib وحدة الطلبات توفر عليك الكثير من الوقت والصداع.

بعض الميزات الرئيسية للطلبات:

  • واجهة برمجة تطبيقات بسيطة وأنيقة
  • يجعل طلبات HTTP سهلة للغاية
  • دعم JSON المدمج
  • التعامل مع الرؤوس والمعلمات والمصادقة
  • إعادة المحاولة التلقائية عند حدوث أخطاء في الشبكة
  • مجموعة واسعة من الميزات المتقدمة

لتثبيت الطلبات، قم ببساطة بتشغيل:

pip install requests

ثم import requests في التعليمات البرمجية الخاصة بك وأنت على استعداد لبدء إجراء استدعاءات API!

دعونا نسير عبر بعض الأمثلة البسيطة.

تقديم طلب الحصول على

استدعاء API الأكثر شيوعًا هو طلب GET لاسترداد البيانات من نقطة النهاية.

إليك كيفية تقديم طلب GET مع الطلبات:

import requests 

response = requests.get(‘https://api.github.com/repos/requests/requests‘)

سيؤدي هذا إلى إرسال طلب GET إلى نقطة نهاية GitHub API لاسترداد البيانات الموجودة في مستودع الطلبات.

نعود أ Response كائن يحتوي على رمز الحالة ورؤوس الاستجابة والبيانات.

لطباعة رمز حالة الاستجابة:

print(response.status_code)

>>> 200

يشير رمز الحالة 200 إلى نجاح طلبنا. توجد العديد من رموز الحالة الأخرى التي تشير إلى وجود أخطاء أو حالات فشل - وسنغطي كيفية التعامل معها لاحقًا.

للوصول إلى بيانات الاستجابة، ما عليك سوى الاتصال .json():

data = response.json()

print(data[‘stargazers_count‘])

>>> 64245

يتم تحليل البيانات كـ JSON تلقائيًا. وهذا يجعل العمل مع واجهات برمجة تطبيقات JSON أمرًا سهلاً للغاية.

تمرير المعلمات

بالنسبة للعديد من واجهات برمجة التطبيقات، تحتاج إلى تمرير المعلمات لتصفية البيانات، وترقيم الصفحات، والمزيد.

قم بتمرير المعلمات كقاموس إلى ملف params حجة:

params = {‘type‘: ‘owner‘, ‘sort‘: ‘updated‘}
response = requests.get(‘https://api.github.com/repos/kennethreitz/requests‘, 
                        params=params)

تقوم الطلبات بتشفير المعلمات وإضافتها إلى عنوان URL الخاص بك.

يمكنك أيضًا تمرير المعلمات مباشرة في عنوان URL:

response = requests.get(‘https://api.github.com/repos/kennethreitz/requests?type=owner&sort=updated‘)

في كلتا الحالتين يعمل ولكن تمرير القاموس يعتبر أنظف.

طلبات POST

لإنشاء موارد على الخادم، يمكنك استخدام طلب POST.

قم بتمرير البيانات لنشرها كقاموس إلى json المعلمة:

data = {‘name‘: ‘John Smith‘, ‘email‘: ‘[email protected]‘}
response = requests.post(‘https://api.example.com/users‘, json=data)

يؤدي ذلك إلى تشفير البيانات بتنسيق JSON وإرسال POST إلى واجهة برمجة التطبيقات (API) لإنشاء مورد مستخدم جديد.

بالنسبة للمشاركات، يجب عليك أيضًا التحقق من صحة رمز الحالة الذي تم إرجاعه:

if response.status_code == 201:
  print(‘User created!‘)

الحالة 201 تعني أنه تم إنشاء المورد بنجاح على الخادم.

وضع، تصحيح، حذف

وبصرف النظر عن GET وPOST، فإن طرق HTTP الشائعة الأخرى هي:

  • ضع - تحديث مورد موجود
  • تصحيح - التحديث الجزئي للمورد
  • حذف - حذف مورد

هذه تعمل بشكل مشابه، فقط قم باستدعاء الطريقة المقابلة requests:

# PUT - Update user
requests.put(‘https://api.example.com/users/123‘, json=updated_data) 

# PATCH - Partial update  
requests.patch(‘https://api.example.com/users/123‘, json=partial_data)

# DELETE - Delete user
requests.delete(‘https://api.example.com/users/123‘)

الآن أنت تعرف كيفية إجراء مكالمات API باستخدام جميع طرق HTTP الشائعة!

التعامل مع استجابات واجهة برمجة التطبيقات

عند العمل مع واجهات برمجة التطبيقات، تحتاج إلى التعامل مع بيانات الاستجابة بناءً على رمز الحالة الذي يعرضه الخادم.

تستخدم واجهات برمجة التطبيقات رموز حالة HTTP القياسية للإشارة إلى النجاح أو الأخطاء أو الفشل. بعض منها الشائعة تشمل:

  • 200 – حسنًا – نجح الطلب
  • 201 – تم الإنشاء – تم إنشاء المورد بنجاح
  • 400 – طلب سيء – كان الطلب غير صحيح أو مفقود البيانات
  • 401 – غير مصرح به – المصادقة مطلوبة
  • 403 – محظور – ليس لديك حق الوصول إلى هذا المورد
  • 404 – غير موجود – المورد غير موجود
  • 500 - خطأ في الخادم - واجه الخادم خطأ غير متوقع

يمكنك التحقق من رمز الحالة على كائن الاستجابة:

response = requests.get(‘https://api.example.com/items/123‘)

if response.status_code == 200:
  # Success!
elif response.status_code == 404:
  # Notify user item does not exist

للإيجاز، أوصي بتغليف جميع مكالمات الطلبات الخاصة بك في وظيفة مساعدة مثل:

def make_api_request(endpoint):
  response = requests.get(endpoint)

  response.raise_for_status()

  return response.json()

وهذا يجعل الكود أكثر نظافة، بالإضافة إلى مركزية معالجة الأخطاء في مكان واحد.

raise_for_status() سيثير استثناءً إذا كان هناك رمز خطأ HTTP مثل 500 أو 404، مما يوفر عليك التحقق يدويًا في كل مرة.

المصادقة مع واجهات برمجة التطبيقات

تتطلب العديد من واجهات برمجة التطبيقات (APIs) المصادقة لتقييد الوصول. تتضمن بعض النماذج الشائعة لمصادقة API ما يلي:

  • مفاتيح API – تمرير مفتاح API فريد عبر رأس الطلب أو المعلمة
  • المصادقة الأساسية – تمرير اسم المستخدم وكلمة المرور مع الطلب
  • الرموز الحاملة - أرسل رمز حامل OAuth 2.0 من موفر المصادقة
  • مصادقة الملخص - يشبه المصادقة الأساسية ولكن بيانات الاعتماد مشفرة

الطلبات تجعل التعامل مع المصادقة أمرًا بسيطًا.

لاستخدام مفتاح API، قم بتمريره كرأس:

headers = {‘Authorization‘: ‘Bearer YOUR_API_KEY‘}
response = requests.get(‘https://api.example.com‘, headers=headers)

للحصول على المصادقة الأساسية، قم بتوفير اسم المستخدم وكلمة المرور على شكل صف:

requests.get(‘https://api.example.com‘, 
            auth=(‘username‘, ‘password‘))

ستتعامل الطلبات مع تشفير بيانات الاعتماد الخاصة بك بشكل صحيح.

بالنسبة إلى الرموز المميزة لحاملها من موفري OAuth مثل Facebook وTwitter وGoogle وغيرها:

params = {‘access_token‘: ‘OAUTH_TOKEN‘}
requests.get(‘https://api.example.com‘, params=params)  

قم بتمرير رمز الوصول كمعلمة وستتولى الطلبات الباقي.

تعد المصادقة الصحيحة أمرًا بالغ الأهمية للوصول الآمن إلى واجهات برمجة التطبيقات في تطبيقات Python وسير العمل.

أفضل الممارسات للعمل مع واجهات برمجة التطبيقات

الآن أنت تعرف كيف لاستدعاء واجهات برمجة التطبيقات مع بايثون، دعونا نناقش بعض أفضل الممارسات للعمل بفعالية معها:

تعامل مع الأخطاء بأمان

يمكن أن تفشل واجهات برمجة التطبيقات بطرق غير متوقعة - تتعطل الخوادم، وتنقطع الشبكات، ويقوم مقدمو الخدمة بإجراء تغييرات.

عند تقديم طلبات API:

  • استخدم المحاولة/باستثناء الكتل للقبض على الأخطاء
  • التعامل مع الاستثناءات الشائعة مثل ConnectionErrors
  • التحقق من رموز الحالة والتعامل مع الردود غير 200
  • استخدم إستراتيجية التراجع الأسي لإعادة محاولة الطلبات الفاشلة

وهذا يضمن أن تطبيقك يتدهور بشكل جيد عند فشل واجهات برمجة التطبيقات.

حدود معدل الاحترام

لمنع إساءة الاستخدام، تفرض واجهات برمجة التطبيقات (API) حدودًا للمعدل على الطلبات لكل ساعة/يوم.

سيؤدي تجاوز هذه الحدود إلى منع وصولك، ربما بشكل دائم.

لتجنب هذا:

  • مراجعة وثائق حدود المعدل وفهم الحصص الخاصة بك
  • طلبات الحد - إجراء المكالمات فقط عند الضرورة
  • تنفيذ مؤقت التراجع إذا وصلت إلى الحد الأقصى للإيقاف المؤقت قبل إعادة المحاولة
  • لا تقم أبدًا بإرسال بريد عشوائي أو إساءة استخدام واجهة برمجة التطبيقات (API)! وهذا سوف يؤدي إلى كتل.

تعمل حدود المعدل على حماية واجهات برمجة التطبيقات بحيث تعمل لجميع المستخدمين. احترمهم في استخدامك.

ردود ذاكرة التخزين المؤقت

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

تتضمن مكتبات التخزين المؤقت الشائعة لـ Python Redis وMemcached وSQLAlchemy.

يتجنب التخزين المؤقت مكالمات الشبكة غير الضرورية للطلبات المتكررة.

أمثلة واستخدامات واجهة برمجة تطبيقات Python

الآن دعونا نلقي نظرة على بعض الأمثلة الواقعية لواجهات برمجة التطبيقات الشائعة وكيف يمكنك الوصول إليها في بايثون.

تويتر API

تسمح واجهة برمجة تطبيقات Twitter بالاستعلام عن التغريدات والمستخدمين وعلامات التصنيف والتحليلات. تحتاج إلى التقدم بطلب للحصول على حساب مطور Twitter للحصول على بيانات اعتماد API.

تثبيت ملتوي مكتبة لواجهة Twitter API أكثر ودية:

pip install tweepy

مثال لجلب التغريدات لعلامة التصنيف:

import tweepy

client = tweepy.Client(bearer_token=TWITTER_TOKEN)

tweets = client.search_recent_tweets(query="#python")

for tweet in tweets.data:
   print(tweet.text)

رؤية مستندات تويبي لمزيد من التفاصيل.

واجهة برمجة تطبيقات جيثب

تتيح واجهة برمجة تطبيقات GitHub الوصول البرمجي إلى مستودعات GitHub والتعليمات البرمجية والمستخدمين والمزيد دون مصادقة.

مثال لجلب مستودعات المستخدم:

import requests

response = requests.get(‘https://api.github.com/users/kennethreitz/repos‘)

for repo in response.json():
  print(repo[‘name‘]) 

رؤية مستندات GitHub API لمزيد من حالات الاستخدام.

API الشريط

تتيح واجهة Stripe API إمكانية إنشاء مدفوعات في التطبيقات ومواقع الويب.

تثبيت شريط المكتبة والاستيراد:

pip install stripe

import stripe

مثال لإنشاء رسوم:

stripe.api_key = ‘STRIPE_SECRET_KEY‘ 

charge = stripe.Charge.create(
  amount=1000,
  currency=‘usd‘,
  source=‘tok_visa‘ # Token from Stripe.js
)

يتعامل Stripe مع الأعباء الثقيلة للمدفوعات نيابةً عنك.

يرى مستندات API الخاصة بـ Stripe للحصول على مرجع API الكامل.

هناك الكثير من واجهات برمجة التطبيقات الرائعة الأخرى مثل Slack وTwilio وGoogle Maps وAWS والمزيد! المفتاح هو العثور على مصدر البيانات المناسب لتطبيقك والاستفادة من قوة واجهات برمجة التطبيقات.

وفي الختام

آمل أن يقدم هذا الدليل نظرة عامة مفيدة حول تقديم طلبات API في Python باستخدام مكتبة الطلبات. فيما يلي بعض الوجبات الرئيسية:

  • الطلبات يجعل الاتصال بواجهات برمجة التطبيقات أمرًا بسيطًا - قم بتثبيته باستخدام النقطة
  • استخدم أساليب HTTP الشائعة مثل GET وPOST وPUT وDELETE لعمليات CRUD
  • تمرير المعلمات والمصادقة والعناوين والبيانات بسهولة
  • التعامل مع رموز الحالة والأخطاء بشكل صحيح
  • تنفيذ أفضل الممارسات مثل تحديد المعدل والتخزين المؤقت
  • دمج واجهات برمجة التطبيقات الرائعة مثل Twitter وGitHub وStripe والمزيد!

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

للخطوات التالية، أوصي بتصفح الموقع الرسمي يطلب المستندات، وقراءة مستندات API الخاصة بأي خدمات ترغب في دمجها، ومراجعة بعض المستودعات باستخدام واجهات برمجة تطبيقات Python مثل هذا.

أتمنى أن تجد هذا الدليل مفيدًا! اسمحوا لي أن أعرف إذا كانت لديك أي أسئلة أخرى حول استخدام Python وAPIs. ترميز سعيد!

الانضمام إلى محادثة

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