กำลังดึงข้อมูล

การอ่านข้อมูลด้วย GET

เราสามารถอ่านข้อมูลจากฐานข้อมูลของเรา Firebase โดยการออก GET การร้องขอไปยังปลายทาง URL ของ มาต่อกันที่ตัวอย่างบล็อกของเราจากส่วนก่อนหน้าและอ่านข้อมูลโพสต์บล็อกทั้งหมดของเรา:

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

คำขอที่ประสบความสำเร็จจะถูกระบุโดย 200 OK รหัสสถานะ HTTP และการตอบสนองจะมีข้อมูลที่เราเรียกกำลัง

การเพิ่มพารามิเตอร์ URI

REST API ยอมรับพารามิเตอร์การสืบค้นหลายตัวเมื่ออ่านข้อมูลจากฐานข้อมูล 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'

โทรกลับ

ในการโทรออกส่วนที่เหลือจากเว็บเบราว์เซอร์ข้ามโดเมนคุณสามารถใช้ JSONP เพื่อตัดการตอบสนองในฟังก์ชั่นการโทรกลับจาวาสคริปต์ เพิ่ม callback= จะมี REST API ห่อข้อมูลที่ส่งกลับในฟังก์ชั่นการโทรกลับที่คุณระบุ ตัวอย่างเช่น:

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

ตื้น

นี่เป็นคุณสมบัติขั้นสูงที่ออกแบบมาเพื่อช่วยให้คุณทำงานกับชุดข้อมูลขนาดใหญ่โดยไม่ต้องดาวน์โหลดทุกอย่าง ที่จะใช้มันเพิ่ม shallow=true เป็นพารามิเตอร์ ซึ่งจะจำกัดความลึกของข้อมูลที่ส่งคืน หากข้อมูลที่ตำแหน่งเป็น JSON ดั้งเดิม (สตริง ตัวเลข หรือบูลีน) ค่าของข้อมูลนั้นจะถูกส่งคืน ถ้าภาพรวมข้อมูลที่สถานที่ที่เป็นวัตถุ JSON ค่าสำหรับแต่ละคีย์จะถูกตัดให้เป็นจริง ตัวอย่างเช่น การใช้ข้อมูลด้านล่าง:

{
  "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 เพื่อหาไดโนเสาร์ทั้งหมดที่มีชื่อมาก่อน Pterodactyl 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'

การสืบค้นข้อมูลตามช่วงยังมีประโยชน์เมื่อคุณต้องการจัดหน้าข้อมูลของคุณ

วางมันทั้งหมดเข้าด้วยกัน

เราสามารถรวมเทคนิคเหล่านี้ทั้งหมดเพื่อสร้างการสืบค้นที่ซับซ้อน ตัวอย่างเช่น คุณอาจต้องการค้นหาชื่อของไดโนเสาร์ทั้งหมดที่เตี้ยกว่าหรือเท่ากับไดโนเสาร์ที่เราโปรดปราน สเตโกซอรัส:

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="$คีย์"

เมื่อใช้ orderBy="$key" พารามิเตอร์เพื่อจัดเรียงข้อมูลของคุณข้อมูลจะถูกส่งกลับในลำดับโดยคีย์ดังต่อไปนี้ โปรดทราบว่าคีย์ต้องเป็นสตริงเท่านั้น

  1. คีย์ย่อยที่มีคีย์ที่สามารถแยกวิเคราะห์เป็นจำนวนเต็ม 32 บิตจะมาก่อน โดยเรียงลำดับจากน้อยไปมาก
  2. รายการย่อยที่มีค่าสตริงเป็นคีย์ถัดไป โดยเรียงลำดับจากน้อยไปหามาก

orderBy="$value"

เมื่อใช้ 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 จะเป็นวัตถุที่มีสองคีย์: เส้นทางและ data:
เส้นทางชี้ไปยังตำแหน่งที่สัมพันธ์กับ URL คำขอ
ไคลเอนต์ควรแทนที่ข้อมูลทั้งหมดที่ตำแหน่งนั้นในแคชด้วยข้อมูลที่ระบุในข้อความ
ปะ ข้อมูลที่เข้ารหัส JSON จะเป็นวัตถุที่มีสองคีย์: เส้นทางและ data:
เส้นทางชี้ไปยังตำแหน่งที่สัมพันธ์กับ URL คำขอ
สำหรับแต่ละคีย์ในข้อมูล ไคลเอนต์ควรแทนที่คีย์ที่เกี่ยวข้องในแคชด้วยข้อมูลสำหรับคีย์นั้นในข้อความ
ให้มีชีวิตอยู่ ข้อมูลสำหรับเหตุการณ์นี้เป็นโมฆะ ไม่จำเป็นต้องดำเนินการใดๆ
ยกเลิก ข้อมูลสำหรับเหตุการณ์นี้เป็นโมฆะ
เหตุการณ์นี้จะถูกส่งไปหากกฎฐานข้อมูลเรียลไทม์ของ Firebase ทำให้การอ่านที่ตำแหน่งที่ร้องขอไม่ได้รับอนุญาตอีกต่อไป
auth_revoked ข้อมูลสำหรับเหตุการณ์นี้เป็นสตริงที่ระบุว่าหนังสือรับรองหมดอายุ
เหตุการณ์นี้จะถูกส่งไปเมื่อพารามิเตอร์การรับรองความถูกต้องที่ให้มาใช้ไม่ได้อีกต่อไป

ด้านล่างนี้คือตัวอย่างของชุดเหตุการณ์ที่เซิร์ฟเวอร์อาจส่ง:

// 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 และ API สตรีมมิ่ง