1. ما هو JSON؟ (المعرفة الأساسية)

نظرة عامة على JSON

JSON (JavaScript Object Notation) هو تنسيق بيانات يُستخدم بشكل متكرر في تبادل المعلومات بين العميل والخادم. يتميز بكونه خفيف الوزن وسهل القراءة وبهيكل بسيط، مما يجعله شائعًا في تطبيقات الويب وتطبيقات الهواتف المحمولة. JSON عبارة عن نص يمكن التعامل معه بسهولة بأي لغة برمجة، مما يمنحه مرونة عالية جدًا.

البنية الأساسية لـ JSON

يمثل JSON البيانات في شكل أزواج من المفاتيح والقيم. على سبيل المثال:

{
  "الاسم": "ساتو",
  "العمر": 30,
  "الهوايات": ["القراءة", "الأفلام"]
}

في هذا المثال، الاسم هو نص، العمر هو رقم، والهوايات هي مصفوفة. بفضل بساطته وسهولة قراءته، يعتبر JSON فعالًا جدًا في تبادل البيانات.

مميزات JSON

  1. خفيف وفعال: كونه نصيًا يقلل من حجم البيانات المنقولة ويخفف من عبء الشبكة.
  2. عالي التوافق: مدعوم تقريبًا في جميع لغات البرمجة ويمكن استخدامه عبر منصات متعددة.
  3. سهولة التحليل: سهل القراءة والكتابة، وهو أداة قوية خصوصًا عند التعامل مع واجهات API.

2. التعامل مع JSON في Python (الأساسيات)

وحدة json في Python

في Python، يمكن استخدام وحدة json لقراءة وكتابة بيانات JSON بسهولة. على سبيل المثال، لتحويل JSON إلى قاموس (dictionary) في Python:

import json

json_data = '{"الاسم": "ساتو", "العمر": 30}'
python_obj = json.loads(json_data)

print(python_obj)  # {'الاسم': 'ساتو', 'العمر': 30}

وبالعكس، لتحويل كائن Python إلى JSON:

python_obj = {"الاسم": "ساتو", "العمر": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)

print(json_data)  # {"الاسم": "ساتو", "العمر": 30}

القراءة والكتابة من/إلى ملف

يمكن أيضًا قراءة بيانات JSON من ملف أو كتابتها في ملف:

# قراءة من ملف
with open('data.json', 'r') as f:
    data = json.load(f)

# الكتابة إلى ملف
with open('data.json', 'w') as f:
    json.dump(python_obj, f, ensure_ascii=False)
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. التعامل مع JSON في Python (التطبيق العملي)

استخدام وحدة requests للتواصل مع API

باستخدام وحدة requests، يمكن إرسال واستقبال بيانات JSON بسهولة عبر API. مثال على إرسال طلب POST:

إرسال بيانات JSON عبر POST

import requests

url = 'https://example.com/api'
data = {'الاسم': 'ساتو', 'العمر': 30}

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

print(json_response)

استقبال بيانات JSON عبر GET

باستخدام طلب GET يمكن استرجاع بيانات JSON من API:

response = requests.get('https://example.com/api/user/1')
data = response.json()

print(data)

 

4. التعامل مع الأخطاء وأفضل الممارسات

التعامل مع الأخطاء أثناء التواصل مع API

عند حدوث خطأ أثناء الاتصال بـ API، من المهم التعامل معه بشكل صحيح. المثال التالي يوضح كيفية التعامل مع أخطاء الشبكة أو انتهاء المهلة:

try:
    response = requests.post(url, json=data)
    response.raise_for_status()
except requests.exceptions.HTTPError as errh:
    print("خطأ HTTP:", errh)
except requests.exceptions.ConnectionError as errc:
    print("خطأ في الاتصال:", errc)
except requests.exceptions.Timeout as errt:
    print("خطأ مهلة:", errt)
except requests.exceptions.RequestException as err:
    print("خطأ غير متوقع:", err)

إعادة المحاولة

إذا كانت الشبكة غير مستقرة، يمكن تنفيذ آلية إعادة المحاولة باستخدام Retry:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get(url)
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. التحقق من صحة JSON

التحقق باستخدام مكتبة jsonschema

للتحقق مما إذا كانت بيانات JSON المستلمة من API مطابقة للتنسيق المتوقع يمكن استخدام مكتبة jsonschema:

from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "الاسم": {"type": "string"},
        "العمر": {"type": "number"}
    },
    "required": ["الاسم", "العمر"]
}

json_data = {"الاسم": "ساتو", "العمر": 30}

try:
    validate(instance=json_data, schema=schema)
    print("JSON صالح")
except ValidationError as e:
    print("خطأ في التحقق:", e)

يمكن التعامل مع مخططات معقدة أو كائنات متداخلة، مما يضمن صحة البيانات المستلمة من API.

6. أفضل الممارسات الأمنية

إدارة مفاتيح API

يُنصح بعدم تخزين مفاتيح API مباشرة في الكود، بل في متغيرات بيئية لتقليل المخاطر الأمنية:

import os

api_key = os.getenv('API_KEY')

تنقية البيانات

قبل إرسال مدخلات المستخدم إلى الخادم، يجب تنقيتها بشكل صحيح لتجنب هجمات مثل SQL Injection أو XSS:

from html import escape

safe_data = escape(user_input)
年収訴求