استرجاع البيانات

قراءة البيانات مع GET

يمكننا قراءة البيانات من قاعدة بيانات Firebase لدينا من خلال إصدار GET طلب إلى نقطة النهاية URL لها. دعنا نتابع مثال مدونتنا من القسم السابق ونقرأ جميع بيانات منشور المدونة الخاصة بنا:

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

سوف تتم الإشارة إلى طلب ناجح من قبل 200 OK رمز حالة HTTP، وسوف استجابة تحتوي على بيانات نحن استرجاع.

إضافة معامِلات URI

تقبل واجهة برمجة تطبيقات REST العديد من معاملات الاستعلام عند قراءة البيانات من قاعدة بيانات Firebase. المدرجة أدناه هي المعلمات الأكثر استخدامًا. للحصول على قائمة كاملة، يرجى الرجوع إلى المرجع REST API .

المصادقة

و auth تسمح المعلمة طلب الوصول إلى البيانات المحمية من قبل قواعد بيانات Firebase الحقيقي ، ومدعومة من قبل جميع أنواع الطلب. حجة يمكن أن تكون إما السر الخاصة بك Firebase التطبيق أو الرمز المميز للتصديق، كما هو موضح في المستخدمين في مشاريع Firebase . في المثال التالي نرسل GET طلب مع auth المعلمة، حيث CREDENTIAL إما السر الخاصة بك Firebase التطبيق أو مصادقة رمز:

curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'

مطبعة

تحديد print=pretty عوائد البيانات في شكل مقروء الإنسان.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

تحديد print=silent بإرجاع 204 No Content على النجاح.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'

أتصل مرة أخرى

لإجراء مكالمات REST من متصفح الإنترنت عبر المجالات يمكنك استخدام JSONP إلى التفاف استجابة في دالة رد جافا سكريبت. إضافة callback= لديك API REST التفاف البيانات التي تم إرجاعها في وظيفة رد الاتصال التي تحددها. على سبيل المثال:

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://docs-examples.firebaseio.com/fireblog/posts.json?callback=gotData">

أجوف

هذه ميزة متقدمة ، مصممة لمساعدتك في العمل مع مجموعات البيانات الكبيرة دون الحاجة إلى تنزيل كل شيء. لاستخدامها، إضافة shallow=true كمعلمة. سيحد هذا من عمق البيانات التي يتم إرجاعها. إذا كانت البيانات الموجودة في الموقع هي JSON بدائية (سلسلة أو رقم أو منطقي) ، فسيتم إرجاع قيمتها ببساطة. إذا كان لقطة البيانات الموجودة في الموقع هي كائن JSON، سيتم اقتطاع القيم لكل مفتاح إلى true. على سبيل المثال ، باستخدام البيانات أدناه:

{
  "message": {
    "user": {
      "name": "Chris"
    },
    "body": "Hello!"
  }
}

// A request to /message.json?shallow=true
// would return the following:
{
  "user": true,
  "body": true
}

// A request to /message/body.json?shallow=true
// would simply return:
"Hello!"

جربه مع هذا curl الطلب:

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'

نفذ الوقت

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

تحديد timeouts باستخدام التنسيق التالي: 3ms ، 3s ، أو 3min ، مع عدد وحدة. إذا لم يكن محددا، وأقصى timeout من 15min سيتم تطبيق. إذا كانت timeout ليست إيجابية، أو تجاوز الحد الأقصى، سيتم رفض الطلب مع HTTP 400 خطأ. في المثال التالي، GET يتضمن الطلب على timeout من 10 ثانية.

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?timeout=10s'

تصفية البيانات

يمكننا إنشاء استعلامات لتصفية البيانات بناءً على عوامل مختلفة. للبدء، وتحديد كيف تريد البيانات الخاصة بك لتتم تصفيته باستخدام orderBy المعلمة. بعد ذلك، يمكنك الجمع بين orderBy مع أي من الخمسة الأخرى المعلمات: limitToFirst ، limitToLast ، startAt ، endAt ، و equalTo .

نظرًا لأننا جميعًا في Firebase نعتقد أن الديناصورات رائعة جدًا ، فسنستخدم مقتطفًا من عينة قاعدة بيانات حقائق الديناصورات لتوضيح كيفية تصفية البيانات:

{
  "lambeosaurus": {
    "height": 2.1,
    "length": 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height": 4,
    "length": 9,
    "weight": 2500
  }
}

يمكننا تصفية البيانات في واحدة من ثلاث طرق: عن طريق مفتاح الطفل، من خلال المفتاح، أو من حيث القيمة. يبدأ استعلام مع واحدة من هذه المعايير، ومن ثم يجب أن تكون جنبا إلى جنب مع واحد أو أكثر من المعايير التالية: startAt ، endAt ، limitToFirst ، limitToLast ، أو equalTo .

التصفية بواسطة مفتاح فرعي محدد

يمكننا تصفية العقد بواسطة مفتاح الطفل المشترك عن طريق تمرير هذا المفتاح إلى orderBy المعلمة. على سبيل المثال ، لاسترداد جميع الديناصورات التي يزيد ارتفاعها عن 3 ، يمكننا القيام بما يلي:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

سيتم فرز أي العقدة التي لا تملك مفتاح طفل نحن التصفية على بقيمة null . للحصول على تفاصيل حول كيفية طلب البيانات، انظر كيف يتم أمرت البيانات .

يدعم Firebase أيضًا الاستعلامات التي يطلبها الأطفال المتداخلون بشدة ، بدلاً من الأطفال فقط بمستوى واحد لأسفل. هذا مفيد إذا كان لديك بيانات متداخلة بعمق مثل هذا:

{
  "lambeosaurus": {
    "dimensions": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "dimensions": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

للاستعلام عن الارتفاع الآن ، نستخدم المسار الكامل للكائن بدلاً من مفتاح واحد:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="dimensions/height"&startAt=3&print=pretty'

لا يمكن تصفية الاستعلامات إلا من خلال مفتاح واحد في كل مرة. باستخدام orderBy المعلمة عدة مرات على نفس الطلب يلقي خطأ.

التصفية حسب المفتاح

يمكننا أيضا العقد تصفية حسب المفاتيح الخاصة بهم باستخدام orderBy="$key" المعلمة. يسترد المثال التالي عن الديناصورات مع اسم بدءا من حرف a من خلال m :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'

التصفية حسب القيمة

يمكننا تصفية العقد من قيمة مفاتيح أطفالهم باستخدام orderBy="$value" المعلمة. لنفترض أن الديناصورات تخوض منافسة في رياضة الديناصورات ونحن نتتبع نتائجها بالشكل التالي:

{
  "scores": {
    "bruhathkayosaurus": 55,
    "lambeosaurus": 21,
    "linhenykus": 80,
    "pterodactyl": 93,
    "stegosaurus": 5,
    "triceratops": 22
  }
}

لاسترداد جميع الديناصورات التي حصلت على درجة أعلى من 50 ، يمكننا تقديم الطلب التالي:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'

انظر كيف يتم أمرت البيانات تفسيرا حول كيفية null يتم فرز، منطقية، سلسلة، وجوه القيم عند استخدام orderBy="$value" .

تصفية معقدة

يمكننا دمج معلمات متعددة لإنشاء استعلامات أكثر تعقيدًا.

استعلامات الحد

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

استخدام لدينا الحقائق ديناصور قاعدة البيانات و orderBy ، يمكننا العثور على اثنين من أثقل الديناصورات:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'

وبالمثل، يمكن أن نجد اثنين أقصر الديناصورات باستخدام limitToFirst :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'

يمكننا أيضا إجراء الاستفسارات الحد مع orderBy="$value" . إذا أردنا إنشاء لوحة ليدربورد مع أعلى ثلاثة منافسين في رياضات الديناصورات من حيث النقاط ، فيمكننا القيام بما يلي:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'

استعلامات النطاق

باستخدام startAt ، endAt ، و equalTo يسمح لنا لاختيار انطلاق التعسفي ونقطة النهاية لالاستفسارات لدينا. على سبيل المثال، إذا أردنا أن تجد كل الديناصورات التي لا يقل عن ثلاثة أمتار، يمكننا الجمع بين orderBy و startAt :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

يمكننا استخدام endAt للعثور على جميع الديناصورات التي تأتي قبل المجنح lexicographically أسماء:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'

يمكننا الجمع بين startAt و endAt للحد من طرفي الاستعلام لدينا. المثال التالي يعثر على جميع الديناصورات التي يبدأ اسمها بالحرف "b":

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'

استعلامات النطاق مفيدة أيضًا عندما تحتاج إلى ترقيم بياناتك.

ضع كل شيء معا

يمكننا دمج كل هذه الأساليب لإنشاء استعلامات معقدة. على سبيل المثال ، ربما تريد العثور على اسم جميع الديناصورات الأقصر من أو يساوي ارتفاعها من النوع المفضل لدينا ، Stegosaurus:

MY_FAV_DINO_HEIGHT=`curl "https://dinosaur-facts.firebaseio.com/dinosaurs/stegosaurus/height.json"`
curl "https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy=\"height\"&endAt=${MY_FAV_DINO_HEIGHT}&print=pretty"

كيف يتم ترتيب البيانات

يشرح هذا القسم كيفية ترتيب بياناتك عند استخدام كل من معلمات التصفية الثلاثة.

ترتيب حسب

عند استخدام orderBy مع اسم مفتاح الأطفال، والبيانات التي تحتوي سيتم أمرت مفتاح الطفل المحدد على النحو التالي:

  1. الأطفال الذين يعانون من null قيمة المفتاح طفل معين يأتي أولا.
  2. الأطفال الذين يعانون من قيمة false للحصول على مفتاح الطفل المحدد يأتي المقبل. إذا كان لدى الأطفال متعددة وقيمة false ، يتم فرزها lexicographically بواسطة مفتاح.
  3. الأطفال الذين يعانون من قيمة true للحصول على مفتاح الطفل المحدد يأتي المقبل. إذا كان لدى الأطفال متعددة وقيمة true ، يتم فرزها lexicographically بواسطة مفتاح.
  4. يأتي الأطفال ذوو القيمة الرقمية بعد ذلك ، ويتم فرزهم بترتيب تصاعدي. إذا كان لدى العديد من الأطفال نفس القيمة العددية للعقدة الفرعية المحددة ، فسيتم فرزهم حسب المفتاح.
  5. تأتي السلاسل بعد الأرقام ، ويتم ترتيبها حسب المعجم بترتيب تصاعدي. إذا كان العديد من الأطفال لديهم نفس القيمة للعقدة الفرعية المحددة ، فسيتم ترتيبهم معجمًا حسب المفتاح.
  6. تأتي الكائنات أخيرًا ، ويتم ترتيبها حسب المعجم حسب المفتاح بترتيب تصاعدي.
يتم إرجاع النتائج المصفاة بدون ترتيب. إذا كان ترتيب بياناتك مهمًا ، يجب عليك فرز النتائج في تطبيقك بعد إعادتها من Firebase.

orderBy = "$ key"

عند استخدام orderBy="$key" المعلمة لفرز البيانات الخاصة بك، سيتم إرجاع البيانات في ترتيب تصاعدي ترتيب بواسطة مفتاح النحو التالي. ضع في اعتبارك أن المفاتيح يمكن أن تكون سلاسل فقط.

  1. الأطفال الذين لديهم مفتاح يمكن تحليله كعدد صحيح 32 بت يأتون أولاً ، ويتم فرزهم بترتيب تصاعدي.
  2. يأتي بعد ذلك الأطفال الذين لديهم قيمة سلسلة كمفتاح لهم ، ويتم فرزهم حسب المعجم بترتيب تصاعدي.

orderBy = "قيمة بالدولار"

عند استخدام orderBy="$value" المعلمة لفرز البيانات الخاصة بك، سيتم أمرت الأطفال قيمتها. معايير الترتيب هي نفسها البيانات التي يتم ترتيبها بواسطة المفتاح الفرعي ، باستثناء قيمة العقدة المستخدمة بدلاً من قيمة المفتاح الفرعي المحدد.

orderBy = "الأولوية بالدولار"

عند استخدام orderBy="$priority" المعلمة لفرز البيانات الخاصة بك، يتم تحديد ترتيب الأطفال حسب الأولوية والمفتاح كما يلي. ضع في اعتبارك أن قيم الأولوية يمكن أن تكون أرقامًا أو سلاسل فقط.

  1. يأتي الأطفال الذين ليس لديهم أولوية (الافتراضي) أولاً.
  2. يأتي بعد ذلك الأطفال الذين لديهم رقم كأولوية. يتم فرزها عدديًا حسب الأولوية ، من الصغيرة إلى الكبيرة.
  3. يأتي الأطفال الذين لديهم سلسلة كأولوية لهم في المرتبة الأخيرة. يتم فرزها حسب المعجمية حسب الأولوية.
  4. عندما يكون لطفلين نفس الأولوية (بما في ذلك بدون أولوية) ، يتم فرزهما حسب المفتاح. تأتي المفاتيح الرقمية أولاً (مرتبة رقميًا) ، متبوعة بالمفاتيح المتبقية (مرتبة حسب المعجم).

لمزيد من المعلومات حول الأولويات، راجع مرجع API .

يتدفقون من REST API

النهاية Firebase REST دعم ل EventSource /-المرسلة خادم الأحداث بروتوكول، مما يجعل من السهل للتغيرات تيار لموقع واحد في قاعدة بيانات Firebase لدينا.

لبدء البث ، سنحتاج إلى القيام بما يلي:

  1. تعيين العميل هو رأس قبول إلى text/event-stream
  2. احترم عمليات إعادة توجيه HTTP ، ولا سيما رمز حالة HTTP 307
  3. تشمل auth المعلمة الاستعلام إذا كان موقع قاعدة البيانات Firebase يتطلب إذن قراءة

في المقابل ، سيرسل الخادم الأحداث المسماة كحالة البيانات عند تغيير عنوان URL المطلوب. يتوافق هيكل هذه الرسائل مع بروتوكول EventSource:

event: event name
data: JSON encoded data payload

قد يرسل الخادم الأحداث التالية:

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

فيما يلي مثال لمجموعة الأحداث التي قد يرسلها الخادم:

// Set your entire cache to {"a": 1, "b": 2}
event: put
data: {"path": "/", "data": {"a": 1, "b": 2}}


// Put the new data in your cache under the key 'c', so that the complete cache now looks like:
// {"a": 1, "b": 2, "c": {"foo": true, "bar": false}}
event: put
data: {"path": "/c", "data": {"foo": true, "bar": false}}


// For each key in the data, update (or add) the corresponding key in your cache at path /c,
// for a final cache of: {"a": 1, "b": 2, "c": {"foo": 3, "bar": false, "baz": 4}}
event: patch
data: {"path": "/c", "data": {"foo": 3, "baz": 4}}

إذا كنت تستخدم الذهاب، تحقق من Firego ، مجمع طرف ثالث حول Firebase REST والجري واجهات برمجة التطبيقات.