Google Firestore — هي قاعدة بيانات NoSQL سحابية من Firebase، مصممة لتخزين مستندات JSON. وهي مثالية للتطبيقات القابلة للتوسع والتي تعمل في الوقت الفعلي. ومع ذلك، فإن العمل مع Firestore مباشرة عبر google-cloud-firestore ليس دائمًا مريحًا، خاصة إذا كنت معتادًا على النهج الكائني والكود المقيد الأنواع.
FireO – ORM لجوجل Firestore — هي مكتبة بايثون تبسط العمل مع Firestore من خلال توفير واجهة مشابهة لـ ORMs الشهيرة. النماذج، الحقول، التحقق، والعلاقات — كل هذا أصبح متاحًا الآن في عالم Firebase.
ما هو FireO ولماذا يجب استخدامه
FireO (Firebase ORM) — هو تعيين كائني-علائقي لجوجل Firestore، مكتوب بلغة بايثون. تتيح المكتبة للمطورين التعامل مع Firestore كما لو كانت قاعدة بيانات علائقية تقليدية، باستخدام الكلاسات والكائنات بدلاً من الاستعلامات المباشرة لواجهة API.
المزايا الرئيسية لـ FireO:
- سهولة الاستخدام: بناء جملة بديهي مشابه لـ Django ORM
- تحديد أنواع الحقول: تحديد صارم للأنواع مع تحقق تلقائي
- التحقق من البيانات: فحص مدمج للبيانات قبل الحفظ
- دعم العلاقات: العمل مع حقول المرجع والهياكل المتداخلة
- إدارة تلقائية للبيانات الوصفية: إنشاء تلقائي للطوابع الزمنية
- الترحيل: إدارة مبسطة لهيكل البيانات
تثبيت وإعداد FireO
تثبيت المكتبة
pip install fireo
إعداد المصادقة
للعمل مع Firestore، يجب إعداد المصادقة عبر حساب الخدمة (Service Account):
- أنشئ حساب خدمة في Firebase Console
- حمّل مفتاح JSON
- حدد المسار إلى المفتاح في متغير البيئة:
export GOOGLE_APPLICATION_CREDENTIALS="path/to/your-key.json"
طريقة بديلة لإعداد الاتصال
from fireo import connection
# الاتصال عبر ملف
connection(from_file="path/to/serviceAccountKey.json")
# الاتصال عبر متغير البيئة
connection()
أساسيات Firestore ونموذج المستندات
هيكل البيانات في Firestore
يخزن Firestore البيانات في التسلسل الهرمي التالي:
- قاعدة البيانات → المجموعات → المستندات → الحقول
- المستندات يمكن أن تحتوي على مجموعات فرعية
- الحقول يمكن أن تكون من أنواع مختلفة: نصوص، أرقام، مصفوفات، كائنات، إلخ.
خصائص نهج NoSQL
Firestore هي قاعدة بيانات بدون مخطط (schemaless)، مما يعني:
- المستندات في نفس المجموعة يمكن أن تحتوي على حقول مختلفة
- لا حاجة لتحديد الهيكل مسبقًا
- مرونة في تغيير هيكل البيانات
يضيف FireO طبقة من الهيكل والتحقق فوق هذه المرونة.
إنشاء النماذج في FireO
نموذج أساسي
from fireo.models import Model
from fireo.fields import TextField, NumberField, BooleanField
class User(Model):
name = TextField(required=True, max_length=100)
age = NumberField(required=True)
is_active = BooleanField(default=True)
class Meta:
collection_name = "users" # اختياري، افتراضيًا يتم استخدام اسم الكلاس
نموذج متقدم مع التحقق
from fireo.fields import EmailField, DateTimeField, ListField
from datetime import datetime
class Profile(Model):
user_id = TextField(required=True)
email = EmailField(required=True)
created_at = DateTimeField(default=datetime.now)
tags = ListField أيضاً في المكتبة
التشفير في C++: التشفير والتجزئة باستخدام OpenSSL و Crypto++
العمل مع S3 والتخزين السحابي في Node.js: مكتبة @aws-sdk/client-s3
التخزين المؤقت في Go (Golang): Redis، التخزين في الذاكرة والحلول الأخرى
إرسال البريد الإلكتروني باستخدام PHP: دليل شامل لمكتبة PHPMailer