الدرس 15 من 20

العمل مع واجهات البرمجة

مصادقة API

3 دقيقة للقراءة

واجهات API تحتاج لمعرفة من يُجري الطلبات. المصادقة تتحقق من هويتك وتتحكم في الوصول إلى الموارد.

طرق المصادقة الشائعة

1. مفتاح API في الترويسة (الأكثر شيوعاً للذكاء الاصطناعي)

import requests
import os

headers = {
    "Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}",
    "Content-Type": "application/json"
}

response = requests.post(url, headers=headers, json=data)

مزودون مختلفون يستخدمون تنسيقات ترويسة مختلفة:

المزودتنسيق الترويسة
OpenAIAuthorization: Bearer sk-...
Anthropicx-api-key: sk-ant-...
GoogleAuthorization: Bearer ... (OAuth)
مخصصغالباً X-API-Key: ...

2. مفتاح API في معامل الاستعلام

# أقل أماناً - مرئي في السجلات!
response = requests.get(
    "https://api.example.com/data",
    params={"api_key": "your-key"}
)

3. المصادقة الأساسية

from requests.auth import HTTPBasicAuth

response = requests.get(
    url,
    auth=HTTPBasicAuth("username", "password")
)

# أو الاختصار:
response = requests.get(url, auth=("username", "password"))

إدارة المفاتيح الآمنة

import os
from dotenv import load_dotenv

# تحميل من ملف .env
load_dotenv()

# الحصول على المفاتيح بأمان
OPENAI_KEY = os.getenv("OPENAI_API_KEY")
ANTHROPIC_KEY = os.getenv("ANTHROPIC_API_KEY")

# التحقق عند بدء التشغيل
if not OPENAI_KEY:
    raise ValueError("OPENAI_API_KEY غير معيّن!")

def get_headers(provider="openai"):
    """الحصول على ترويسات المصادقة لمزودين مختلفين."""
    if provider == "openai":
        return {
            "Authorization": f"Bearer {OPENAI_KEY}",
            "Content-Type": "application/json"
        }
    elif provider == "anthropic":
        return {
            "x-api-key": ANTHROPIC_KEY,
            "Content-Type": "application/json",
            "anthropic-version": "2023-06-01"
        }

إنشاء عميل قابل لإعادة الاستخدام

import requests
import os

class AIClient:
    """عميل API بسيط مع مصادقة مدمجة."""

    def __init__(self, api_key=None):
        self.api_key = api_key or os.getenv("OPENAI_API_KEY")
        self.base_url = "https://api.openai.com/v1"
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        })

    def chat(self, messages, model="gpt-4"):
        response = self.session.post(
            f"{self.base_url}/chat/completions",
            json={"model": model, "messages": messages},
            timeout=60
        )
        response.raise_for_status()
        return response.json()

# الاستخدام
client = AIClient()
result = client.chat([{"role": "user", "content": "مرحباً!"}])

أفضل ممارسات الأمان

افعللا تفعل
خزّن المفاتيح في متغيرات البيئةضع المفاتيح في الكود المصدري
استخدم ملفات .env محلياًأرسل .env إلى git
غيّر المفاتيح دورياًشارك المفاتيح بين المشاريع
استخدم مفاتيح مختلفة لكل بيئةاستخدم مفاتيح الإنتاج في التطوير

بعد ذلك، سنتعلم البرمجة غير المتزامنة لاستدعاءات API متزامنة. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 4: العمل مع واجهات البرمجة

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.